ODPS 不用循环生成连续日期

生成 20230801 ~ 20230831之间的每一天的sql代码怎么写? 只要一行代码.

一行代码:

select TO_CHAR(DATEADD(TO_DATE(bizdate,'yyyymmdd'),d,'dd'),'yyyymmdd') 
from (select * from values ('20230801',sequence(0,20,1)) t(bizdate,ds))
LATERAL VIEW explode(ds) D as d;

 

分析:

  1. values 创建临时表, 语法:
     select * from values (xxx),(xxx) t(col1,col2...) 
    这里的  select * from values ('20230801',sequence(0,20,1)) t(bizdate,ds)  建立了一个临时表, bizdate是起始值, ds是一个序列 [1,2,3,4,...20]

 

  1. explode 可以把列表展开, 每个元素变成一行开, 如下图这样

 

  1. lateral view 可以让bizdate与展开列表D中的每一项进行组合.

     LATERAL VIEW explode(ds) D as d  的意思就是 列表ds展开成临时表D, 其中的每一个元素的列名是d

 

  1. dateadd    TO_CHAR(DATEADD(TO_DATE(bizdate,'yyyymmdd'),d,'dd'),'yyyymmdd')  把bizdate与d相加即可生成连续的日期

 

posted @   酱_油  阅读(212)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
点击右上角即可分享
微信分享提示