sql - 雪花创建日期列表
问题描述
这段代码在 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
解决方案
戈登的回答很有用,但要注意—— 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
推荐阅读
- html - 使用 box-shadow 或任何 css 技巧更改样式
- scala - Scala 标准库中从 Any 到 Unit 的常量函数
- flutter - 向上滚动时固定项目
- pyspark-sql - Spark SQL - 在列名中使用逗号为列命名
- c# - .Net核心中间件httpContext不支持并发读写
- c - 为什么“char 数组”需要两个“[]”,而“int 数组”需要一个“[]”?
- .net - Excel 加载项 - 发生意外错误 - 处理请求时出现内部错误
- asp.net-core - .NET Core 3 rc1 到最终升级:Visual Studio 2019 中缺少
- css - 使图像替代文本在所有浏览器上看起来几乎相同
- javascript - 当发送的数组超过特定长度时,AJAX 调用返回 403