此代码在 SSMS 中完美运行,但在 Snowflake 中则不然。关于如何修复它的任何建议?
set (start_date) = ('2017-07-01');
set (end_date) = ('2022-06-30');
with get_all_dates as (
select
$start_date as DateValue
, 1 as level
union all
select
DATEADD(DAY,1,DateValue)
, level + 1
from
get_all_dates
where
Datevalue < $end_date
)
select * from get_all_dates;
这会产生以下错误消息:
<块引用>SQL 编译错误:锚和递归项之间的类型不匹配 递归 CTE 'GET_ALL_DATES' 中的列 'DATEVALUE'
预期输出:
2017-07-01
2017-07-02
...
2022-06-29
2022-06-30
答案 0 :(得分:3)
Gordon 的回答很有用,但要注意——seq4() 不能保证产生序列号。这意味着您可能会得到一系列不同的日期,而不是所需的结果。
您可以改为这样做:
select '2020-01-01'::date+x
from (
select row_number() over(order by 0) x
from table(generator(rowcount => 1824))
)
更短的版本:
select '2020-01-01'::date + row_number() over(order by 0) x
from table(generator(rowcount => 1824))
使用任意的 start_date 和 end_date:
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
答案 1 :(得分:2)
您可以生成一堆数字并根据这些数字生成日期:
htop