Mysql十进制除法自动向上舍入

时间:2017-03-09 08:23:16

标签: mysql decimal

我的功能是

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

1 个答案:

答案 0 :(得分:0)

您的函数定义期望INT作为返回值。

当您返回leaves_takenDECIMAL(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