질의작성
2016.05.18 02:58
두 datetime 연산결과를 "?일 ?시:?분:?초"로 표시하기
조회 수 6366 추천 수 0 댓글 0
○ 테이블 스키마
create table diff_datetime ( start_datetime datetime, end_datetime datetime ) ;
○ 테스트 데이타
insert into diff_datetime ( start_datetime, end_datetime ) values (to_datetime('20160510053140','YYYYMMDDHH24MISS'), to_datetime('20160517165930', 'YYYYMMDDHH24MISS') ) ;
insert into diff_datetime ( start_datetime, end_datetime ) values (to_datetime('20160509000510','YYYYMMDDHH24MISS'), to_datetime('20160517090723', 'YYYYMMDDHH24MISS') ) ;
insert into diff_datetime ( start_datetime, end_datetime ) values (to_datetime('20160516011258','YYYYMMDDHH24MISS'), to_datetime('20160517203243', 'YYYYMMDDHH24MISS') ) ;
insert into diff_datetime ( start_datetime, end_datetime ) values (to_datetime('20160517011258','YYYYMMDDHH24MISS'), to_datetime('20160517203243', 'YYYYMMDDHH24MISS') ) ;
○ SQL
select
start_datetime
, end_datetime
, ( end_datetime - start_datetime ) / (1000 * 60 * 60* 24 ) || '일 '
|| TO_CHAR( TO_DATETIME ('00010101000000', 'YYYYMMDDHH24MISS' ) + ( end_datetime - start_datetime ), 'HH24:MI:SS' ) AS diff_time
from diff_datetime
○ SQL 실행결과
start_datetime end_datetime diff_time
====================================================================================
05:31:40.000 AM 05/10/2016 04:59:30.000 PM 05/17/2016 '7일 11:27:50'
12:05:10.000 AM 05/09/2016 09:07:23.000 AM 05/17/2016 '8일 09:02:13'
01:12:58.000 AM 05/16/2016 08:32:43.000 PM 05/17/2016 '1일 19:19:45'
01:12:58.000 AM 05/17/2016 08:32:43.000 PM 05/17/2016 '0일 19:19:45'
○ 설명
일 계산은 end_datetime에서 start_datetime을 차감하면 밀리세컨드 결과가 계산 된다.
1일은 1000 밀리세컨드 * 60초 * 60분 * 24시간임으로 ( end_datetime - start_datetime ) / (1000 * 60 * 60* 24 ) 으로 계산하면 된다.
참고로 예제 연산 처리순서가 나누기 연산이 더 빠르기 때문에 괄호를 사용하여 연산순서를 조정하였다.
시간 계산 부분은
TO_CHAR 함수의 날짜 포맷을 맞추기 위하여 TO_DATETIME ('00010101000000', 'YYYYMMDDHH24MISS' ) 를 사용하였다.
0001년 1월 1일에 end_datetime - start_datetime 결과를 더한 후에 시간을 추출하였다.
날짜 연산에 대한 출력을 "?일 ?시:?분:?초"로 출력 할 때는 유용한 방법이다.
-
synonym에 대하여
-
VALUES 절 활용하기
-
여러개의 컬럼을 하나로 묶어주는 함수 CONCAT_WS 사용방법
-
입력된 날자를 이용하여 해당 주차의 모든 날자 구하기
-
JAVA_SP를 이용해서 정규표현식을 이용해서 치환을 하자.
-
테이블 명세서 쿼리
-
loose index scan을 활용한 효과적인 쿼리 튜닝 방안
-
CONNECT BY 절 포함 질의 튜닝 예제
-
UPDATE에서 조인을 통해, 결과값 수정하는 방법
-
subquery를 이용한 튜닝예제
-
입력된 년월 또는 두개의 날짜을 이용하여 달력 및 주차 구하기
-
INSTR함수 사용하기
-
group_concat(문자열 그룹처리) 함수 사용하기
-
두 datetime 연산결과를 "?일 ?시:?분:?초"로 표시하기
-
ORACLE 테이블 및 컬럼 COMMENT 일광등록 스크립트
-
스키마 및 인덱스 선언에 따른 최대 용량 산정을 위한 ROW SIZE 확인
-
Oracle UTL_ENCODE.TEXT_ENCODE를 CUBRID로 변환하기
-
테이블 리스트 취합 SQL
-
테이블 컬럼 변경 및 추가
-
FOR UPDATE