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

如何使用无存储过程的SQL获取近n个月每个月的首日和末日

以下是不同主流数据库的原生SQL实现,均不依赖存储过程,可直接运行,示例取最近5个已结束的完整自然月的首日、末日,你可按需调整月份参数:

MySQL 实现
SELECT
    DATE_FORMAT(date_sub(curdate(), INTERVAL (t.n) MONTH), '%d-%m-%Y') AS first_day,
    DATE_FORMAT(LAST_DAY(date_sub(curdate(), INTERVAL (t.n) MONTH)), '%d-%m-%Y') AS last_day
FROM (
    SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) t
ORDER BY first_day ASC;

若需要调整月份数,增减子查询SELECT ... UNION ALL的行数即可。

PostgreSQL 实现
SELECT
    TO_CHAR(date_trunc('month', CURRENT_DATE - (n || ' month')::interval), 'dd-mm-yyyy') AS first_day,
    TO_CHAR((date_trunc('month', CURRENT_DATE - (n || ' month')::interval) + INTERVAL '1 month - 1 day'), 'dd-mm-yyyy') AS last_day
FROM generate_series(1,5) AS t(n)
ORDER BY first_day ASC;

若需要调整月份数,修改generate_series(1,5)里的第二个参数即可。

SQL Server 实现
SELECT
    FORMAT(DATEADD(month, DATEDIFF(month, 0, GETDATE()) - n, 0), 'dd-MM-yyyy') AS first_day,
    FORMAT(EOMONTH(DATEADD(month, -n, GETDATE())), 'dd-MM-yyyy') AS last_day
FROM (VALUES (1),(2),(3),(4),(5)) AS t(n)
ORDER BY first_day ASC;

若需要调整月份数,增减VALUES后的数值项即可。

内容的提问来源于stack exchange,提问作者Another Day Another Data

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:57:03