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

如何在PostgreSQL中根据年份获取4-3月财年的月份列表

PostgreSQL 生成指定年份对应的4月至次年3月财年月份列表

要生成传入年份(如2022)对应的4月到次年3月的12个月份列表,最简洁的方式是利用PostgreSQL的generate_series函数生成连续的月份序列,再格式化输出。以下是具体实现:

基础实现(固定年份)

如果直接指定年份,执行下面的SQL即可得到2022年4月至2023年3月的月份列表:

SELECT TO_CHAR(month_date, 'YYYY-MM') AS fiscal_month
FROM generate_series(
    DATE_TRUNC('month', '2022-04-01'::DATE),
    DATE_TRUNC('month', '2023-03-01'::DATE),
    INTERVAL '1 month'
) AS month_date;

动态参数化版本(支持传入任意年份)

如果需要动态传入年份作为参数,可通过CTE先定义参数,再自动计算财年的起止月份:

WITH input_params AS (
    SELECT 2022 AS target_fiscal_year  -- 这里替换为你的输入年份
)
SELECT TO_CHAR(month_date, 'YYYY-MM') AS fiscal_month
FROM input_params,
     generate_series(
         DATE_TRUNC('month', make_date(target_fiscal_year, 4, 1)),
         DATE_TRUNC('month', make_date(target_fiscal_year + 1, 3, 1)),
         INTERVAL '1 month'
     ) AS month_date;

关于EXTRACT函数的问题说明

你之前尝试用EXTRACT()可能没得到预期结果,大概率是因为没处理财年跨自然年的情况:比如2023年1-3月属于2022财年,直接提取年份会得到2023,和财年的逻辑不符。而generate_series直接生成连续的月份序列,能自然覆盖跨年份的情况,无需额外判断。

扩展:自定义输出格式

如果需要其他格式的月份字符串,只需修改TO_CHAR的格式模板即可:

  • 中文格式:TO_CHAR(month_date, 'YYYY年MM月')
  • 带日的格式:TO_CHAR(month_date, 'YYYY-MM-DD')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:03