Database/Oracle
[Oracle] 오라클 날짜 차이 구하기
Thë 굽은ㄴr무™
2012. 11. 8. 15:34
출처 : http://blog.naver.com/rainbow8830?Redirect=Log&logNo=70119741931
1. EXTRACT
- date type 의 값에서 지정한 field(년, 월, 일) 항목을 추출
+ 사용법
- SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL : 현재 날짜에서 년도만 추출
- SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL : 현재 날짜에서 월만 추출
- SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL : 현재 날짜에서 일 수만 추출
2. NUMTOYMINTERVAL(NUMBER, TYPE_OF_INTERVAL)
- 년, 월에 대한 시간 간격을 구함
+ 사용법
- SELECT SYSDATE - NUMTOYMINTERVAL (1, 'YEAR') FROM DUAL : 현재 날짜에서 1년을 뺌
- SELECT SYSDATE - NUMTOYMINTERVAL (1, 'MONTH') FROM DUAL : 현재 날짜에서 1달을 뺌
3. NUMTODSINTERVAL(NUMBER, TYPE_OF_INTERVAL)
- 날짜, 시, 분, 초에 대한 시간 간격을 구함
+ 사용법
- SELECT SYSDATE - NUMTODSINTERVAL (1, 'DAY') FROM DUAL : 현재 날짜에서 1일을 뺌
- SELECT SYSDATE - NUMTODSINTERVAL (1, 'HOUR') FROM DUAL : 현재 날짜에서 1시간을 뺌
- SELECT SYSDATE - NUMTODSINTERVAL (1, 'MINUTE') FROM DUAL : 현재 날짜에서 10분을 뺌
- SELECT SYSDATE - NUMTODSINTERVAL (1, 'SECOND') FROM DUAL : 현재 날짜에서 100초를 뺌
WITH TBL AS ( SELECT '201211051000' STM , '201211051100' ETM FROM DUAL UNION ALL SELECT '201211051100' STM , '201211051110' ETM FROM DUAL UNION ALL SELECT '201211051200' STM , '201211061420' ETM FROM DUAL ) SELECT CHA_1 ,SUBSTR(CHA_1, 9,2) || '일 ' || SUBSTR(CHA_1,12,2) || '시 ' || SUBSTR(CHA_1,15,2) || '분' CHA_1C ,CHA_2 ,TO_NUMBER(SUBSTR(CHA_2, 2, 9)) || '일 ' || SUBSTR(CHA_2,12,2) || '시 ' || SUBSTR(CHA_2,15,2) || '분' CHA_2C ,CHA_3 ,SUBSTR(CHA_3, 8,3) || '일 ' || SUBSTR(CHA_3,12,2) || '시 ' || SUBSTR(CHA_3,15,2) || '분' CHA_3C FROM ( SELECT NUMTODSINTERVAL(SUM( TO_DATE(ETM,'YYYYMMDDHH24MI') - TO_DATE(STM,'YYYYMMDDHH24MI')) ,'DAY') CHA_1 ,NUMTODSINTERVAL(SUM( TO_DATE(ETM,'YYYYMMDDHH24MI') - TO_DATE(STM,'YYYYMMDDHH24MI')) + 0.00000000001 ,'DAY') CHA_2 ,NUMTODSINTERVAL(SUM( TO_DATE(ETM,'YYYYMMDDHH24MI') - TO_DATE(STM,'YYYYMMDDHH24MI')) + 0.000694444444444444,'DAY') CHA_3 FROM TBL ) |
WITH TB AS ( SELECT MOD(TO_DATE('201211051100', 'YYYYMMDDHH24MI') - TO_DATE('201211051000', 'YYYYMMDDHH24MI'), 1) TIM FROM DUAL UNION ALL SELECT MOD(TO_DATE('201211051100', 'YYYYMMDDHH24MI') - TO_DATE('201211051000', 'YYYYMMDDHH24MI'), 1) TIM FROM DUAL ) SELECT TIM , TO_CHAR(TO_DATE(ROUND(SUM(TIM) * 86400), 'SSSSS'), 'HH24:MI') BBB FROM TB |