presto求时间差

  • Post author:
  • Post category:其他




概念

date_diff用于求两个日期间的差,三个参数
第一个参数:比如求差几天用day,差几个小时用hour
第二个参数:起始日期或者其实timestamp
第三个参数:结束日期或者结束timestamp
date_diff(unit, timestamp1, timestamp2)bigint
Returns timestamp2 - timestamp1 expressed in terms of unit.



案例

如下,

from_unixtime



double

类型转为

timestamp

类型,然后利用

date_diff

函数求天数差

> select date_diff('day',from_unixtime(1610180252),from_unixtime(1611217052));
 _col0
-------
    12

求小时差

> select date_diff('hour',from_unixtime(1610180252),from_unixtime(1611217052));
 _col0
-------
   288

求分钟差

> select date_diff('minute',from_unixtime(1610180252),from_unixtime(1611217052));
 _col0
-------
 17280

或者可以如下

date_parse(string, format) → timestamp
Parses string into a timestamp using format.
> select  date_diff('day',date_parse('2020-12-03', '%Y-%m-%d'),date_parse('2020-12-13', '%Y-%m-%d'));
 _col0
-------
    10

下面这种写法是不对的,presto识别不了

s> select  date_diff('day',date_parse('2020-12-03', 'YYYY-mm-dd'),date_parse('2020-12-13', 'YYYY-mm-dd'));
Query 20210106_095222_00034_xaemj failed: Invalid format: "2020-12-03"

还可以用如下写法

> select  date_diff('day',cast ('2020-12-03' as date),cast('2020-12-13' as date));
 _col0
-------
    10



总结


  • double



    timestamp

    ,用

    from_unixtime

  • string



    timestamp

    ,用

    date_parse


  • hive

    是不一样的



版权声明:本文为u010711495原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。