hive:select unix_timestamp(create_time,'yyyy-MM-dd HH:mm:ss') from table1;
--需要注意的地方:如果create_time是标准的到秒级的时间可以不指定格式化参数,如果不是标准的到秒级的日期必须根据create_time到哪一位后面对应到格式化话哪一位,否则会返回空值或者是不正确的结果。
presto:select cast(to_unixtime( cast ( create_time as timestamp)) as bigint) from table1;
--需要注意的地方,首先presto这里的转换使用起来比较麻烦,需要to_unixtime和timestamp结合起来使用才行。这里的create_time不用指定格式化的参数,会根据具体的值来解析。
spark:select unix_timestamp(create_time,'yyyy-MM-dd HH:mm:ss') from table1;
--与hive的使用保持一致。
impala:select unix_timestamp(create_time,'yyyy-MM-dd HH:mm:ss')+28800 from table1;
--需要注意的地方转换后需要加上28800才能与中国时区保持一致,create_time如果是标准的日期时间格式的话可以不指定格式化参数,否则必须要指定格式化参数。
mysql:select UNIX_TIMESTAMP(created_time) from table1;
--这里不需要指定格式化参数,否则会报错,需要特别注意
hive:selecct datediff(date1,date2) from table1;
--计算两个日期之间的天数差值,是拿date1的日期“减去”date2的日期,即使date1和date2精确到的粒度不一致,如date1到天,date2到分钟结果仍然只是天粒度的差值。
presto:select date_diff('day',cast(date1 as date),cast(date2 as date)) from table1;
--这里需要三个参数,第一个参数指定计算的是“天”差值、“小时”差值等,另外需要把date1和date2转为date类型,否则SQL会报错。
spark:selecct datediff(date1,date2) from table1;
--使用hive保持一致
impala:select datediff(date1,date2) from table1;
--这里的使用基本上与hive保持一致
mysql:selecct datediff(date1,date2) from table1;
--基本与hive的用法一致
hive:select date_add/date_sub(date1,N) from table1;--date_add和date_sub分别是向后推N天和向前推N天,另外这里增加或减少后日期只精确到天,即使date1是精确到秒粒度的计算结果最终仍然是到天粒度。
presto:select date_add('day', N, cast(date1 as date) ) from table1;--这里同样需要三个参数后推日期的粒度,后推多少天,基准日期。另外需要注意preto这里没有date_sub函数,需要使用的话可以把第二个参数改为负值即可。
spark:select date_add/date_sub(date1,N) from table1;--使用上与hive保持一致。
impala:select adddate/days_add(date1,N) from table1;--在这个功能实现上adddate和days_add均可使用,需要注意date1要么精确到天(2020-07-01)要么精确到秒(2020-07-01 12:12:11)其他格式会返回空值。另外即使date1只精确到返回结果仍然是到秒的。
mysql:select date_add/date_sub(date1,INTERVAL N DAY) from table;--需要指定后推/前移的天数,如果date1只精确到天则结果也是精确到天,如果date1精确粒度到天后面的级别则会返回秒级别的粒度。
说明:大部分SQL中支持date_add/date_sub,其实使用一个即可,把相对应的N值取为负值即可。