【问题标题】:Generate interval from variable in Presto从 Presto 中的变量生成间隔
【发布时间】:2016-03-03 18:19:57
【问题描述】:

在 Presto SQL 中,与常规 SQL 不同,间隔必须用反逗号创建:

INTERVAL '1' DAY

而不是

INTERVAL 1 DAY

我正在尝试生成一组日期,如下所述:https://stackoverflow.com/a/2157776/2388930,但遇到了问题

INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY

如何实现?我试过了

parse((a.a + (10 * b.a) + (100 * c.a)) as varchar)

但这并不成功。

【问题讨论】:

    标签: sql date time presto


    【解决方案1】:

    我最终使用了 date_add:

    date_add('day', -(a.a + (10 * b.a) + (100 * c.a)), date_trunc('day', now()))
    

    【讨论】:

      【解决方案2】:

      这不是问题的直接答案,但如果目标是复制链接的 Stack Overflow 问题 generate days from date range 中描述的结果,这里是在 Presto 中生成日期序列的替代方法:

      SELECT
          CAST(date_column AS DATE) date_column
      FROM
          (VALUES
              (SEQUENCE(FROM_ISO8601_DATE('2010-01-20'), 
                        FROM_ISO8601_DATE('2010-01-24'), 
                        INTERVAL '1' DAY)
              )
          ) AS t1(date_array)
      CROSS JOIN
          UNNEST(date_array) AS t2(date_column)
      ;
      

      输出:

       date_column
      -------------
       2010-01-20
       2010-01-21
       2010-01-22
       2010-01-23
       2010-01-24
      

      您还可以使用除DAY 之外的其他INTERVAL 值以及除'1' 之外的不同步长。

      *改编自本期评论https://github.com/prestodb/presto/issues/2169#issuecomment-68521569

      【讨论】:

      • sequence 方法只支持最多10000个元素。超出限制时返回此错误:“序列函数的结果不能超过10000个条目”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2022-12-04
      相关资源
      最近更新 更多