我的功能是
DELIMITER $$;
CREATE FUNCTION get_approved_leaves(f_date date, t_date date,
emp_id bigint, ltp_id int)
RETURNS INT NOT DETERMINISTIC
BEGIN
DECLARE leaves_taken decimal(10,3) DEFAULT 0.000;
SELECT SUM(eld_first+eld_second)/2
INTO leaves_taken
FROM erp_apply_leaves, erp_employee_leave_debts
WHERE al_fk_employees = emp_id
AND al_from >= f_date
AND al_to <= t_date
AND al_fk_leave_type = ltp_id
AND eld_fk_apply_leaves = al_id
AND al_status = 101;
RETURN leaves_taken;
END $$;
DELIMITER ;
当我打电话
SELECT get_approved_leaves('2017-01-01','2017-12-31',18, 5) as debted
FROM `erp_employee_leave_debts` WHERE 1
它给出了输出:20
但是这里SUM(eld_first + eld_second)= 39.所以我需要得到输出= 19.5
答案 0 :(得分:0)
您的函数定义期望INT
作为返回值。
当您返回leaves_taken
值DECIMAL(10,3)
时,
SQL Engine将其转换为最接近的INTEGER
值,以匹配返回类型,然后返回。
如果要保留原始值,最好更改函数的返回类型。
示例如下::
CREATE FUNCTION
get_approved_leaves( f_date date, t_date date
, emp_id bigint, ltp_id int )
RETURNS DECIMAL(10,3) NOT DETERMINISTIC