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;
分析:
- 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]
- explode 可以把列表展开, 每个元素变成一行开, 如下图这样
- lateral view 可以让bizdate与展开列表D中的每一项进行组合.
LATERAL VIEW explode(ds) D as d
的意思就是 列表ds展开成临时表D, 其中的每一个元素的列名是d
- dateadd TO_CHAR(DATEADD(TO_DATE(bizdate,'yyyymmdd'),d,'dd'),'yyyymmdd') 把bizdate与d相加即可生成连续的日期
人工智障与神经病网络
https://www.cnblogs.com/JiangOil/