从Presto中的变量生成间隔



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

但这并不成功。

这不是这个问题的直接答案,但如果目标是复制链接堆栈溢出问题中描述的结果,从日期范围生成天数,这里有一种在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.

我最终使用了date_add:

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

我最终使用了@winger答案的更简单版本——交叉连接和值部分似乎是多余的:

SELECT
    *
FROM UNNEST(
        SEQUENCE(
            FROM_ISO8601_DATE('2010-01-20'),
            FROM_ISO8601_DATE('2010-01-24'),
            INTERVAL '1' DAY
        )
    )
 AS t1(date_array)

相关内容

  • 没有找到相关文章

最新更新