业务需要将一笔金额按照发生期间总天数拆分后折算到每个月中,余额补足到最后一个月,如下:
DELIMITER $$
DROP FUNCTION IF EXISTS `fun_divid_monthly_data`$$
CREATE FUNCTION `fun_divid_monthly_data`(
param_current_month VARCHAR (42),
param_startdate VARCHAR (42),
param_enddate VARCHAR (42),
param_amount VARCHAR (42)
) RETURNS DECIMAL(25,8)
BEGIN
RETURN (
CASE
-- 1. 如果只有一个月
WHEN param_current_month = DATE_FORMAT(param_startdate, '%Y%m')
AND DATE_FORMAT(param_current_month, '%Y%m') = DATE_FORMAT(param_enddate, '%Y%m')
THEN param_amount
-- 1.如果是第一个月
WHEN param_current_month = DATE_FORMAT(param_startdate, '%Y%m')
THEN (
param_amount - param_amount % fun_get_date_diff (param_enddate, param_startdate)
) * fun_get_date_diff (
LAST_DAY(param_startdate),
param_startdate
) / fun_get_date_diff (param_enddate, para