如何使用Teradata或SAS SQL生成包含月度起止日期的动态表
Teradata实现动态月度起止日期表方案
直接执行以下SQL,仅需修改临时表中的两个年份参数,即可生成对应区间内所有月份的起止日期:
-- 替换下方两个参数为你需要的起始、结束年份 REPLACE VOLATILE TABLE input_years AS SELECT 2016 AS start_year, 2021 AS end_year WITH DATA ON COMMIT PRESERVE ROWS; SELECT BEGIN(pd) AS Begin_of_Month, LAST_DAY(BEGIN(pd)) AS End_of_Month FROM input_years EXPAND ON PERIOD( TO_DATE(start_year || '-01-01', 'YYYY-MM-DD'), -- 区间起始为起始年1月1日 TO_DATE((end_year + 1) || '-01-01', 'YYYY-MM-DD') -- 区间结束为结束年下一年1月1日,保证包含结束年12月 ) AS pd BY ANCHOR MONTH_BEGIN;
说明
- 代码自动适配闰年2月、大小月的月末日期计算,无需额外手动判断
- 如需输出
YYYY-MM-DD格式的字符串类型日期,可将字段改写为:
TO_CHAR(BEGIN(pd), 'YYYY-MM-DD') AS Begin_of_Month, TO_CHAR(LAST_DAY(BEGIN(pd)), 'YYYY-MM-DD') AS End_of_Month
- 如果不需要保留临时表,也可以直接把年份写死在PERIOD参数中,简化语句。
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

