You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake SQL:如何获取数字格式的过去12个月起止年月

实现方案

不同SQL数据库的日期处理函数存在差异,以下是主流数据库的具体实现方式,可直接套用:

MySQL/MariaDB

先通过DATE_SUB计算偏移后的日期,再用DATE_FORMAT转成YYYYMM格式,最后转换为数字类型:

-- 起始月份(按示例需求,当前日期减12个月得到202112)
SELECT CAST(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 12 MONTH), '%Y%m') AS UNSIGNED) AS start_month;

-- 结束月份(当前日期减1个月得到202211)
SELECT CAST(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y%m') AS UNSIGNED) AS end_month;

如果确实需要按你最初的逻辑用减13个月作为起始,只需把INTERVAL 12 MONTH改成INTERVAL 13 MONTH即可。

PostgreSQL

使用CURRENT_DATE获取当前日期,通过INTERVAL做月份偏移,TO_CHAR格式化后转成整数:

-- 起始月份
SELECT TO_CHAR(CURRENT_DATE - INTERVAL '12 months', 'YYYYMM')::INTEGER AS start_month;

-- 结束月份
SELECT TO_CHAR(CURRENT_DATE - INTERVAL '1 month', 'YYYYMM')::INTEGER AS end_month;

SQL Server

用DATEADD处理日期偏移,可选择FORMAT(可读性高)或CONVERT(性能更优)格式化,再转成数字:

-- 写法1:用FORMAT
SELECT CAST(FORMAT(DATEADD(MONTH, -12, GETDATE()), 'yyyyMM') AS INT) AS start_month;
SELECT CAST(FORMAT(DATEADD(MONTH, -1, GETDATE()), 'yyyyMM') AS INT) AS end_month;

-- 写法2:用CONVERT(推荐大量数据场景)
SELECT CAST(CONVERT(VARCHAR(6), DATEADD(MONTH, -12, GETDATE()), 112) AS INT) AS start_month;
SELECT CAST(CONVERT(VARCHAR(6), DATEADD(MONTH, -1, GETDATE()), 112) AS INT) AS end_month;

Oracle

通过ADD_MONTHS实现月份偏移,TO_CHAR格式化后转成数字:

-- 起始月份
SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'YYYYMM')) AS start_month FROM DUAL;

-- 结束月份
SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYYMM')) AS end_month FROM DUAL;

关键说明

按你给出的示例(起始202112、结束202211,当前日期2022-12-29),起始月份对应的偏移量是减12个月而非13个月——减12个月会得到2021-12-29,格式化后正好是202112;如果坚持最初的减13个月逻辑,会得到202111,和你的预期不符,这点需要注意。

内容的提问来源于stack exchange,提问作者dspassion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:40:37