2015-11-30 21 views
2

在普雷斯托SQL从可变间隔,不像普通的SQL,间隔必须用引号创建:产生普雷斯托

INTERVAL '1' DAY 

而不是

INTERVAL 1 DAY 

我试图生成一组日期如下所述:https://stackoverflow.com/a/2157776/2388930,但我遇到与

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

怎么可能这个b中的问题e达到了?我试过

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

但是这并不成功。

回答

3

我最终使用DATE_ADD:

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

这不是直接回答这个问题,但如果我们的目标是复制的链接堆栈溢出问题,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