【问题标题】:presto - getting days interval (not date)presto - 获取天数间隔(不是日期)
【发布时间】:2019-02-28 21:34:38
【问题描述】:

如何获取 prestodb 的天数间隔?我可以转换为毫秒并将这些转换为天数,但我正在寻找是否有更短的方法来做到这一点。

示例:我想查看从表格中插入第一行到现在已经过了多少天。

SELECT 
    to_milliseconds(date(current_date) - min(created)) / (1000*60*60*24) as days_since_first_row
FROM
    some_table

我希望看到的:(以下任意一项)

 SELECT 
        to_days(date(current_date) - min(created)) / (1000*60*60*24) as days_since_first_row
        ,cast(date(current_date) - min(created)) as days) as days_since_first_row2
    FROM
        some_table

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    使用减法获得间隔,然后在间隔上使用day 获得经过的天数。

    presto:default> select day(current_date - date '2018-07-01');
     _col0
    -------
        86
    

    这方面的文档位于https://trino.io/docs/current/functions/datetime.html

    【讨论】:

    • 谢谢!这在文档中的什么位置?这是便利提取函数的一部分吗?同样使用second()hour()minute() 似乎并没有达到我的预期。
    • @addicted 您应该将其读作“从 [天到秒] 间隔中提取天部分”。 hour() 将从间隔中提取“小时部分”,对于两个日期之间的间隔将始终为 0。如果您想以小时数表示间隔,您可能需要提取日部分、小时部分并将这两者结合起来。跨度>
    • 感谢您对日期时间组件的解释。
    【解决方案2】:

    不幸的是,夏令时打破了接受答案的解决方案。由于夏令时,DAY(DATE '2020-09-6' - DATE '2020-03-09')DAY(DATE '2020-09-6' - DATE '2020-03-08') 都等于 181,DAY 充当时间戳的底函数。

    改为使用DATE_DIFF:

    DATE_DIFF('day', DATE '2020-09-6', DATE '2020-03-09')
    

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多