행위

"오라클 시간계산"의 두 판 사이의 차이

DB CAFE

(경과시간 시:분:초 로 계산)
 
(사용자 2명의 중간 판 19개는 보이지 않습니다)
1번째 줄: 1번째 줄:
일자 계산 = DateTime - 1           = 1일 전
+
= 시간계산 =
                                      (예: 5일 전 = DateTime - 5)
+
{{틀:고지상자
시간 계산 = DateTime - 1/24        = 1시간 전 [24 = 24시간]
+
|제목 = 일자/시간/분/초 계산
                                      (예: 5시간 전 = DateTime - 5/24)
+
|내용 =일자 계산 = DateTime - 1     = 1일 전 (예: 5일 전 = DateTime - 5)
분 계산  = DateTime - 1/(24*60)    = 1분 전 [24 = 24시간, 60 = 60분]
+
 
                                      (예: 5분 전 = DateTime - 5/(24*60))
+
시간 계산 = DateTime - 1/24        = 1시간 전 [24 = 24시간] (예: 5시간 전 = DateTime - 5/24)
초 계산  = DateTime - 1/(24*60*60) = 1초 전 [24 = 24시간, 60 = 60분, 60 = 60초]
+
 
                                      (예: 5초 전 = DateTime - 5/(24*60*60))
+
분 계산  = DateTime - 1/(24*60)    = 1분 전 [24 = 24시간, 60 = 60분] (예: 5분 전 = DateTime - 5/(24*60))
##시간 계산
+
 
 +
초 계산  = DateTime - 1/(24*60*60) = 1초 전 [24 = 24시간, 60 = 60분, 60 = 60초] (예: 5초 전 = DateTime - 5/(24*60*60))
 +
 
 +
}}
 +
 
 +
== 시간 계산 ==
 
<source lang=sql>
 
<source lang=sql>
 
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
 
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
38번째 줄: 43번째 줄:
 
UNION ALL
 
UNION ALL
 
SELECT '  5분 전 : ' || TO_CHAR(SYSDATE - 5/(24*60), 'yyyymmdd hh24:mi:ss') FROM DUAL;
 
SELECT '  5분 전 : ' || TO_CHAR(SYSDATE - 5/(24*60), 'yyyymmdd hh24:mi:ss') FROM DUAL;
 +
</source>
 +
=== 초를 시:분:초 로 계산 ===
 +
* 1000초를 00:16:40초로 표기
 +
<source lang=sql>
 +
SELECT TO_CHAR( TO_DATE(1000,'sssss')
 +
              , 'hh24:mi:ss'
 +
              ) as sec2hms
 +
  FROM DUAL;
 +
</source>
 +
 +
==== 경과시간 시:분:초 로 계산 ====
 +
<source lang=sql>
 +
select TRUNC((to_date('20111010100203','yyyymmddhh24miss')-to_date('20111009090000', 'yyyymmddhh24miss'))*24) || ' : '
 +
|| TRUNC(mod((to_date('20111010100203','yyyymmddhh24miss') - to_date('20111009090000', 'yyyymmddhh24miss'))*24,1)*60) || ' : '
 +
|| TRUNC(round(mod((to_date('20111010100203','yyyymmddhh24miss') - to_date('20111009090000', 'yyyymmddhh24miss'))*24*60,1)*60)) || ''
 +
 +
from dual;
 
</source>
 
</source>
  
##소요시간
+
=== 소요시간 ===
 
* to_date() * 24 * 60 * 60 = 초 (계산된값)  
 
* to_date() * 24 * 60 * 60 = 초 (계산된값)  
  
53번째 줄: 75번째 줄:
 
  WHERE SQL_ID = 'awxb9gjc12tdj' -- ''
 
  WHERE SQL_ID = 'awxb9gjc12tdj' -- ''
 
</source>
 
</source>
 +
 +
== 이전행/현재 행 소요시간 ==
 +
<source lang=sql>
 +
SELECT A.*
 +
    , ROUND((REG_DATE - PREV_REG_DATE) * (24*60),1) "소요시간(M)"
 +
  FROM (
 +
SELECT  REGION_ID,
 +
        REGION_NAME,
 +
        REG_DATE,
 +
        LAG(REG_DATE) OVER (ORDER BY REG_DATE) PREV_REG_DATE -- 이전행 등록일자(시간순으로 등록된),
 +
--        LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
 +
FROM    EMP
 +
ORDER BY REG_DATE
 +
) A
 +
;
 +
</source>
 +
 +
== 현재행/다음행  소요시간 ==
 +
<source lang=sql>
 +
SELECT A.*
 +
    , ROUND((NEXT_REG_DATE - REG_DATE ) * (24*60),1) "소요시간(M)"
 +
  FROM (
 +
SELECT  REGION_ID,
 +
        REGION_NAME,
 +
        REG_DATE,
 +
        LEAD(REG_DATE) OVER (ORDER BY REG_DATE) NEXT_REG_DATE -- 다음행 등록일자(시간순으로 등록된),
 +
--        LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME
 +
FROM    EMP
 +
ORDER BY REG_DATE
 +
) A
 +
;
 +
</source>
 +
 +
[[Category:oracle]]

2024년 1월 3일 (수) 11:08 기준 최신판

thumb_up 추천메뉴 바로가기


1 시간계산[편집]

일자 계산 = DateTime - 1 = 1일 전 (예: 5일 전 = DateTime - 5)

시간 계산 = DateTime - 1/24 = 1시간 전 [24 = 24시간] (예: 5시간 전 = DateTime - 5/24)

분 계산 = DateTime - 1/(24*60) = 1분 전 [24 = 24시간, 60 = 60분] (예: 5분 전 = DateTime - 5/(24*60))

초 계산 = DateTime - 1/(24*60*60) = 1초 전 [24 = 24시간, 60 = 60분, 60 = 60초] (예: 5초 전 = DateTime - 5/(24*60*60))



1.1 시간 계산[편집]

SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT '   1일 전 : ' || TO_CHAR(SYSDATE - 1, 'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT '   5일 전 : ' || TO_CHAR(SYSDATE - 5, 'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT ' 1시간 전 : ' || TO_CHAR(SYSDATE - 1/24, 'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT ' 5시간 전 : ' || TO_CHAR(SYSDATE - 5/24, 'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT '   1분 전 : ' || TO_CHAR(SYSDATE - 1/(24*60), 'yyyymmdd hh24:mi:ss') FROM DUAL
UNION ALL
SELECT '현재 시각 : ' || TO_CHAR(SYSDATE, 'yyyymmdd hh24:mi:ss') AS "D,T,M,S 계산하기"
FROM DUAL
UNION ALL
SELECT '   5분 전 : ' || TO_CHAR(SYSDATE - 5/(24*60), 'yyyymmdd hh24:mi:ss') FROM DUAL;

1.1.1 초를 시:분:초 로 계산[편집]

  • 1000초를 00:16:40초로 표기
SELECT TO_CHAR( TO_DATE(1000,'sssss')
              , 'hh24:mi:ss'
              ) as sec2hms
  FROM DUAL;

1.1.1.1 경과시간 시:분:초 로 계산[편집]

select TRUNC((to_date('20111010100203','yyyymmddhh24miss')-to_date('20111009090000', 'yyyymmddhh24miss'))*24) || ' : ' 
|| TRUNC(mod((to_date('20111010100203','yyyymmddhh24miss') - to_date('20111009090000', 'yyyymmddhh24miss'))*24,1)*60) || ' : '
|| TRUNC(round(mod((to_date('20111010100203','yyyymmddhh24miss') - to_date('20111009090000', 'yyyymmddhh24miss'))*24*60,1)*60)) || ''

from dual;

1.1.2 소요시간[편집]

  • to_date() * 24 * 60 * 60 = 초 (계산된값)
-- 해당쿼리가 실행 소요시간 조회 
SELECT min(first_refresh_time)
     , max(last_refresh_time) 
     , (to_date(to_char(max(last_refresh_time),'hh24miss'),'hh24miss') -
        to_date(to_char(min(first_refresh_time),'hh24miss'),'hh24miss')
       ) * (24*60) AS "소요시간(m)"
  FROM V$SQL_MONITOR
 WHERE SQL_ID = 'awxb9gjc12tdj' -- ''

1.2 이전행/현재 행 소요시간[편집]

SELECT A.*
     , ROUND((REG_DATE - PREV_REG_DATE) * (24*60),1) "소요시간(M)"
  FROM (
SELECT  REGION_ID,
        REGION_NAME,
        REG_DATE,
        LAG(REG_DATE) OVER (ORDER BY REG_DATE) PREV_REG_DATE -- 이전행 등록일자(시간순으로 등록된),
--        LAG(REGION_NAME) OVER (ORDER BY REGION_ID) 이전행NAME
FROM    EMP
ORDER BY REG_DATE
) A
;

1.3 현재행/다음행 소요시간[편집]

SELECT A.*
     , ROUND((NEXT_REG_DATE - REG_DATE ) * (24*60),1) "소요시간(M)"
  FROM (
SELECT  REGION_ID,
        REGION_NAME,
        REG_DATE,
        LEAD(REG_DATE) OVER (ORDER BY REG_DATE) NEXT_REG_DATE -- 다음행 등록일자(시간순으로 등록된),
--        LEAD(REGION_NAME) OVER (ORDER BY REGION_ID) 다음행NAME
FROM    EMP
ORDER BY REG_DATE
) A
;