"오라클 시간계산"의 두 판 사이의 차이
DB CAFE
(→경과시간 시:분:초 로 계산) |
|||
(사용자 2명의 중간 판 21개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | 일자 계산 = DateTime - 1 | + | = 시간계산 = |
− | + | {{틀:고지상자 | |
− | 시간 계산 = DateTime - 1/24 = 1시간 전 [24 = 24시간] | + | |제목 = 일자/시간/분/초 계산 |
− | + | |내용 =일자 계산 = DateTime - 1 = 1일 전 (예: 5일 전 = DateTime - 5) | |
− | 분 계산 = DateTime - 1/(24*60) = 1분 전 [24 = 24시간, 60 = 60분] | + | |
− | + | 시간 계산 = DateTime - 1/24 = 1시간 전 [24 = 24시간] (예: 5시간 전 = DateTime - 5/24) | |
− | 초 계산 = DateTime - 1/(24*60*60) = 1초 전 [24 = 24시간, 60 = 60분, 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 = 초 (계산된값) | ||
49번째 줄: | 71번째 줄: | ||
, (to_date(to_char(max(last_refresh_time),'hh24miss'),'hh24miss') - | , (to_date(to_char(max(last_refresh_time),'hh24miss'),'hh24miss') - | ||
to_date(to_char(min(first_refresh_time),'hh24miss'),'hh24miss') | to_date(to_char(min(first_refresh_time),'hh24miss'),'hh24miss') | ||
− | ) * ( | + | ) * (24*60) AS "소요시간(m)" |
FROM V$SQL_MONITOR | FROM V$SQL_MONITOR | ||
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 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 시간계산[편집]
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
;