如何在MySQL中编写自定义函数获取指定日期对应财年(上年7月-本年6月)
MySQL 自定义财年计算函数实现方案
你提供的原始函数是SQL Server语法,以下是适配MySQL的可运行版本,财年规则完全匹配你的需求:上年7月1日至本年6月30日为一个财年。
1. 创建函数代码
MySQL默认以分号作为语句结束符,创建函数前需要先修改分隔符避免冲突:
DELIMITER // CREATE FUNCTION GetFIYear(input_date DATE) RETURNS VARCHAR(10) DETERMINISTIC BEGIN DECLARE fi_year VARCHAR(10); IF MONTH(input_date) < 7 THEN -- 1-6月归属上一年开始的财年,例如2024年3月属于2023-24财年 SET fi_year = CONCAT(YEAR(input_date) - 1, '-', RIGHT(YEAR(input_date), 2)); ELSE -- 7-12月归属本年开始的财年,例如2024年8月属于2024-25财年 SET fi_year = CONCAT(YEAR(input_date), '-', RIGHT(YEAR(input_date) + 1, 2)); END IF; RETURN fi_year; END // DELIMITER ;
说明:入参设置为DATE类型比VARCHAR兼容性更好,若你需要传入字符串格式日期,可将参数类型修改为
VARCHAR(50),函数内部用STR_TO_DATE(input_date, '%Y-%m-%d')转换即可。
2. 函数调用方式
和你预期的调用逻辑一致,直接在SELECT语句中传入日期参数即可:
-- 传入固定日期测试 SELECT GetFIYear('2024-03-15'); -- 返回 2023-24 SELECT GetFIYear('2024-08-20'); -- 返回 2024-25 -- 结合表查询 SELECT Title, GetFIYear(你的日期字段名) AS financial_year FROM 你的表名;
内容的提问来源于stack exchange,提问作者Umar
相关产品推荐
相关产品推荐

