从Mysql SQL到Presto SQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c13232906050/article/details/82623028


Presto官方文档


前言

Presto SQL最大的“特点”就是:完全不同的数据类型之间不能比较,相似的数据类型一般可以比较。

例如,datevarchar完全不同,但intdoubledatetimestamp(MySQL是datetime)是相似的。

完全不同的数据类型怎么比较?答:转换为相同或相似的数据类型

举个例子
现有MySQL表t_sales_bill,字段如下

column type comment
bill_id bigint
total double 订单金额
sale_time datetime 下单时间

需求:找出下单时间大于2018-09-09的所有订单

MySQL SQL:

select * from t_sales_bill where sale_time > '2018-09-09';

Presto SQL:

select * from t_sales_bill where sale_time > date('2018-09-09');

SQL

标准SQL写法,更像Oracle,支持withover等特性


数据类型

基本和关系型数据库的类型一致,遇到问题再查阅[presto官方文档]

常见不同:MySQL用datetime,Presto用timestamp


类型转换

MySQL

支持完全不同的数据类型之间的比较。如前言的例子,cast用得少

Presto

支持完全不同的数据类型之间的比较。如前言的例子,cast用的很多

用法:cast(value as type)
例子:

cast('2018-09-09' as date)
or
date('2018-09-09')

cast('123456' as int)

遇到问题时,再做类型转换处理即可

一般情况下,异常信息如下(执行SQL:select 1=’1’)
这里写图片描述


日期

MySQL

    -- 当前日期时间
    -- 2018-09-11 10:49:09
    now(),

    -- 当前日期
    -- 2018-09-11
    curdate(),

    -- 昨天日期
    -- 2018-09-10
    -- unit: day, month, year
    curdate() - interval 1 day,

    -- 日期与字符串可以比较
    -- 1(true)
    curdate() > '2018-09-09 12:12:12',

    -- 字符串-日期
    -- 2018-09-09
    date('2018-09-09 12:12:12'),

    -- 日期-字符串
    -- 2018-09-11 10:49:09
    date_format(now(), '%Y-%m-%d %H:%i:%s')

Presto

    -- 当前日期时间
    -- 2018-09-11 10:49:09
    now(),

    -- 当前日期
    -- 2018-09-11
    current_date,

    -- 昨天日期
    -- 2018-09-10
    -- 注意数量是字符串, unit: day, month, year
    current_date - interval '1' day,

    -- 日期类型不能与字符串比较,运行错误,需要显式转换
    -- current_date > '2018-09-09',
    current_date > date('2018-09-09'),

    -- 字符串-日期
    -- 2018-09-09 12:12:12
    date_parse('2018-09-09 12:12:12', '%Y-%m-%d %H:%i:%s'),
    -- 2018-09-09
    cast('2018-09-09' as date),
    -- 2018-09-09 12:12:12
    cast('2018-09-09 12:12:12' as timestamp),

    -- 日期-字符串
    -- 2018-09-11 10:49:09
    date_format(now(), '%Y-%m-%d %H:%i:%s')

猜你喜欢

转载自blog.csdn.net/c13232906050/article/details/82623028
今日推荐