ODPS SQL 生成n个月的日期

ODPS SQL 生成n个月的日期月份

代码参考:

WITH month_seq AS 
(
    SELECT  TO_CHAR(DATEADD(GETDATE(),-diff,'mm'),'yyyy-MM') AS year_month
            ,diff
    FROM    (
                SELECT  EXPLODE(SEQUENCE(0,11)) AS diff
            ) 
)
SELECT  year_month
        ,diff
FROM    month_seq
;
  • EXPLODE(SEQUENCE(0,11))SEQUENCE函数生成一个从0到11的数字序列,即一个包含12个元素[0,1,2,...,11]的数组。EXPLODE函数将这个数组拆解成一列,每个元素成为数组中的一行,因此它将生成一个包含12行,值从0到11的临时表。

  • TO_CHAR(DATEADD(GETDATE(),-diff,'mm'),'yyyy-MM'):这里使用了DATEADD函数将GETDATE()(当前日期)减去上面提到的数组中的每个元素(通过diff引用)。TO_CHAR函数根据格式'yyyy-MM'将结果日期转换成字符串。

  • SELECT ... AS year_month, diff:选择上面转换的年月字符串和原始的差异值diff,并为这些列指定别名year_monthdiff

  • WITH month_seq AS (...):这是一个公用表表达式(CTE),它定义了一个名为month_seq的临时结果集。这里month_seq包含了两列:year_monthdiff

  • SELECT year_month, diff FROM month_seq:这是对month_seq公用表表达式的引用,选择了year_monthdiff两列并返回结果。

最后,整个SELECT语句返回了一个结果集,其中包括了从现在起到过去11个月(总共12个月)每个月对应的年月表示和其相对于当前月的月份差。

视图

CREATE VIEW test_view
(
    @end_date DATETIME,    @num    BIGINT
) AS
SELECT  TO_CHAR(DATEADD(@end_date,-diff,'mm'),'yyyy-MM') AS year_month
        ,diff
FROM    (
            SELECT  EXPLODE(SEQUENCE(0,@num - 1)) AS diff
        ) 
;

SELECT  *
FROM    test_view(GETDATE(),12)
;

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值