如何在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
相关产品推荐
相关产品推荐

