깜놀하는 해므찌로

Oracle 시간 계산 / Oracle FLOOR, MOD / 소수점 계산으로 보이도록 출력 본문

IT

Oracle 시간 계산 / Oracle FLOOR, MOD / 소수점 계산으로 보이도록 출력

agnusdei1207 2022. 9. 29. 09:01
반응형
SMALL
<select id="id" parameterType="vo" resultType="vo">
    /* vo.id */
    <![CDATA[                                      
        SELECT 	EMPLY_SEQ emplySeq        
             ,	FLOOR(((TO_NUMBER(TOTAL_HOUR)*60) + (TO_NUMBER(NVL(TOTAL_MIN, 0))))/60) || '.' || 
                MOD(((TO_NUMBER(TOTAL_HOUR)*60) + (TO_NUMBER(NVL(TOTAL_MIN, 0)))),60) col1
          FROM	t_over_add A 
          LEFT 	OUTER JOIN t_over_time B
            ON 	B.USE_YN = 'Y'   
           AND 	A.OT_SEQ = B.OT_SEQ     
         WHERE	A.USE_YN = 'Y'  
           AND 	B.STATUS = 'D'               
           AND	TO_CHAR(B.APPLY_DATE, 'YYYY.MM.DD') = #{schEtc05} 
    ]]>	     
         <if test='schEtc04 != null and schEtc04 != ""'>
            AND   A.EMPLY_SEQ LIKE '%' || '[' || #{schEtc04} || ']' || '%'
        </if> 
</select>

문제

1. 결과 값이 3.333333333333333... 무한대 발생하는 문제 발생

2. ROUND 처리 시 반올림이 되므로 상세한 결과를 보기 어려움

3. Controller, jsp 에서는 되도록 연산을 삼가해야 하는 상황

 

해결

1. FLOOR 내림 함수를 활용하여 몫만 가지고 온다.

2. || '.' || 을 활용하여 소수점처럼 보이도록 출력

3. MOD 함수를 활용하여 나머지만 따로 출력

반응형
LIST