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

如何在PostgreSQL中根据输入月份获取对应月份的起止日期?

问题原因

你现有代码的逻辑固定取当前日期减去1年对应的月份的起止,完全没有关联你输入的月份参数,所以永远返回去年当前月的结果,和你输入的月份无关。

修改方案(适用于PostgreSQL数据库)

方案1:可手动指定年份+输入月份

如果需要明确指定目标年份(比如示例中的2021),可以用以下代码,直接修改参数里的target_year和target_month即可,target_month就是你输入的月份参数:

WITH input_params AS (
    SELECT 
        2021 AS target_year, -- 目标年份,可按需修改,也可替换为动态取当前年:extract(year from current_date)::int
        9 AS target_month -- 这里绑定你输入的月份参数即可
)
SELECT 
    make_date(target_year, target_month, 1) AS start_date,
    (make_date(target_year, target_month, 1) + '1 month'::interval - '1 day'::interval)::date AS end_date
FROM input_params;

运行示例输入9的输出结果为:

start_date | end_date
-----------+-----------
2021-09-01 | 2021-09-30

方案2:输入月份自动匹配最近的对应年份

如果你需要输入月份后自动取最近的已到来的对应月份(比如当前是2024年10月,输入9返回2024-09,输入12返回2023-12),可以用以下逻辑:

WITH input_params AS (
    SELECT 9 AS target_month -- 绑定你输入的月份参数
),
calc_year AS (
    SELECT 
        CASE 
            WHEN target_month <= extract(month from current_date)::int THEN extract(year from current_date)::int
            ELSE extract(year from current_date)::int - 1
        END AS final_year,
        target_month
    FROM input_params
)
SELECT 
    make_date(final_year, target_month, 1) AS start_date,
    (make_date(final_year, target_month, 1) + '1 month'::interval - '1 day'::interval)::date AS end_date
FROM calc_year;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:03