如何用SQL获取财年当前月份的对应序号(财年为4月至次年3月)
获取财年月份序号(4月至次年3月周期)
针对财年周期为每年4月1日至次年3月31日的需求,以下是主流SQL数据库的实现方案,完全匹配“2022/2023财年中2月对应序号10”的规则(即4月为序号0,次年2月为序号10):
MySQL/MariaDB
利用MONTH()函数提取月份,通过条件分支计算序号:
SELECT CASE WHEN MONTH(current_date) >= 4 THEN MONTH(current_date) - 4 ELSE MONTH(current_date) + 8 END AS fiscal_month_number;
如果需要序号从1开始(4月为1,次年3月为12),调整为:
SELECT CASE WHEN MONTH(current_date) >= 4 THEN MONTH(current_date) - 3 ELSE MONTH(current_date) + 9 END AS fiscal_month_number;
SQL Server
使用DATEPART(month, GETDATE())获取月份值:
SELECT CASE WHEN DATEPART(month, GETDATE()) >= 4 THEN DATEPART(month, GETDATE()) - 4 ELSE DATEPART(month, GETDATE()) + 8 END AS fiscal_month_number;
序号从1开始的版本:
SELECT CASE WHEN DATEPART(month, GETDATE()) >= 4 THEN DATEPART(month, GETDATE()) - 3 ELSE DATEPART(month, GETDATE()) + 9 END AS fiscal_month_number;
PostgreSQL
通过EXTRACT(MONTH FROM CURRENT_DATE)提取月份:
SELECT CASE WHEN EXTRACT(MONTH FROM CURRENT_DATE) >= 4 THEN EXTRACT(MONTH FROM CURRENT_DATE) - 4 ELSE EXTRACT(MONTH FROM CURRENT_DATE) + 8 END AS fiscal_month_number;
序号从1开始的版本:
SELECT CASE WHEN EXTRACT(MONTH FROM CURRENT_DATE) >= 4 THEN EXTRACT(MONTH FROM CURRENT_DATE) - 3 ELSE EXTRACT(MONTH FROM CURRENT_DATE) + 9 END AS fiscal_month_number;
Oracle
使用EXTRACT(MONTH FROM SYSDATE)获取当前月份:
SELECT CASE WHEN EXTRACT(MONTH FROM SYSDATE) >= 4 THEN EXTRACT(MONTH FROM SYSDATE) - 4 ELSE EXTRACT(MONTH FROM SYSDATE) + 8 END AS fiscal_month_number FROM DUAL;
序号从1开始的版本:
SELECT CASE WHEN EXTRACT(MONTH FROM SYSDATE) >= 4 THEN EXTRACT(MONTH FROM SYSDATE) - 3 ELSE EXTRACT(MONTH FROM SYSDATE) + 9 END AS fiscal_month_number FROM DUAL;
验证说明
以2023年2月(属于2022/2023财年)为例:
- 按需求的0起始规则计算:
2 + 8 = 10,完全匹配示例; - 若使用1起始规则,计算结果为
2 + 9 = 11,对应财年第11个月份。
内容的提问来源于stack exchange,提问作者Andre Vioti
相关产品推荐
相关产品推荐

