출처 : 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

 

 

+ Recent posts