2017-03-09 10 views
-1

My機能を切り上げることは、私はそれは置いアウトを与えるMySQLの小数点除算自動的

SELECT get_approved_leaves('2017-01-01','2017-12-31',18, 5) as debted 
    FROM `erp_employee_leave_debts` WHERE 1 

呼び出すと

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 ; 

です私は出力= 19.5を得る必要があります

+0

変更は '' RETURNSにINT'返品DECIMAL' –

答えて

0

あなたの関数定義はを期待しています戻り値として。

そして、あなたがタイプDECIMAL(10,3)であるleaves_taken値を、戻ってきているように、 SQLエンジンは、戻り値の型と一致するように、最も近いINTEGER値に変換し、戻っています。

元の値を保持したい場合は、関数の戻り値の型を変更することをお勧めします。

例は以下の通りである:

CREATE FUNCTION 
     get_approved_leaves( f_date date, t_date date 
          , emp_id bigint, ltp_id int) 
RETURNS DECIMAL(10,3) NOT DETERMINISTIC 
関連する問題