我试图找到与generate_series()(PostgreSQL语法)类似的雪花。
SELECT generate_series(timestamp '2017-11-01', CURRENT_DATE, '1 day')
答案 0 :(得分:2)
我遇到了类似的问题,并找到了一种方法,该方法除了在这里已经很不错的答案之外,还通过使用会话变量避免了生成器需要恒定值的问题。在我看来,这最接近OP的要求。
-- set parameter to be used as generator "constant" including the start day
set num_days = (Select datediff(day, TO_DATE('2017-11-01','YYYY-MM-DD'), current_date()+1));
-- use parameter in bcrowell's answer now
select
dateadd(
day,
'-' || row_number() over (order by null),
dateadd(day, '+1', current_date())
) as date
from table (generator(rowcount => ($num_days)));
-- clean up previously set variable
unset num_days;
答案 1 :(得分:1)
这就是我能够在Snowflake中生成一系列日期的方式。我将行数设置为1095,以获得3年的日期,您当然可以将其更改为适合您的用例的
select
dateadd(day, '-' || seq4(), current_date()) as dte
from
table
(generator(rowcount => 1095))
答案 2 :(得分:1)
只是想扩展Marcin Zukowski的评论,说在使用JOIN
中以这种方式生成的日期范围之后,这些差距几乎立即开始显现。
我们最终还是这样做了!
select
dateadd(
day,
'-' || row_number() over (order by null),
dateadd(day, '+1', current_date())
) as date
from table (generator(rowcount => 90))
答案 3 :(得分:0)
添加此答案是为了完整,以防您有初始和最后日期:
select -1 + row_number() over(order by 0) i, start_date + i generated_date
from (select '2020-01-01'::date start_date, '2020-01-15'::date end_date)
join table(generator(rowcount => 10000 )) x
qualify i < 1 + end_date - start_date