2017-03-09 1 views
-1

내 기능을 모아 것은 내가 뭔가를 넣어 출력을 제공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

변경'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