场景是需要对年费按日拆分,就需要根据年度开始日获取年度天数
DELIMITER $$
DROP FUNCTION IF EXISTS `fun_get_yearly_day_count`$$
CREATE `fun_get_yearly_day_count`(yearly_begin_date DATE) RETURNS INT(11)
BEGIN
DECLARE year_varchar VARCHAR (20) ;
SET year_varchar = YEAR(yearly_begin_date) ;
RETURN (
CASE
WHEN -- 如果是闰年且计费年度开始时间小于2/29,则年度跨越天数因为2/29的存在而变成366天
(
fun_is_leap_year (year_varchar) = 1
AND yearly_begin_date <= DATE_FORMAT(yearly_begin_date, '%Y-02-29')
) -- 如果本年度不是闰年,下一年度是闰年,且开始时间大于等于3/1,是366
OR (
fun_is_leap_year (year_varchar) = 0
AND fun_is_leap_year (year_varchar + 1) = 1
AND DATE_FORMAT(yearly_begin_date, '%m-%d') >= '03-01'
)
THEN 366
ELSE 365
END
) ;
END$$
DELIMITER ;