22

在 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)

但这并不成功。

4

2 回答 2

32

这不是问题的直接答案,但如果目标是复制链接的 Stack Overflow 问题中描述的结果,从 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

除了 之外,您还可以使用其他INTERVALDAY和不同的步长'1'

*改编自此问题评论,https://github.com/prestodb/presto/issues/2169#issuecomment-68521569

于 2017-02-20T19:16:00.833 回答
9

我最终使用了 date_add:

date_add('day', -(a.a + (10 * b.a) + (100 * c.a)), date_trunc('day', now()))
于 2015-12-01T00:20:42.850 回答