Oracle에서 시간 데이터를 저장하기 위한 방법을 알아보도록 합시다.
1. 현재시간 확인하는 법
SELECT SYSDATE FROM DUAL;
데이터 베이스 시스템의 현재 날짜와 시간을 가져오는 함수(SYSDATE)입니다.
가상의 테이블인 DUAL 테이블을 이용해서 시간을 가져왔습니다.
2. 원하는 시간 포맷으로 시간 확인하는 법 (년, 월, 일, 시, 분, 초)
'. / -' 등으로 나누는 날짜 포맷
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY.MM.DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') FROM DUAL;
아래와 같이 값이 나오게 됩니다.
2023-06-15
2023.06.15
2023/06/15
시간 확인 및 월(한국어) 표시
SELECT TO_CHAR(SYSDATE,'MON DD, YYYY HH:MI:SS AM') FROM DUAL;
6월 15, 2023 07:43:40 오후
신기하게(?)도 Locale을 한국으로 지정해 놓으면 한국어로 친절하게 나오더라고요.
그래서 준비했습니다. 한국어 말고 영어로는 어떻게 바꾸는지 알아볼까요.
시간 확인 및 월(영어) 표시
SELECT TO_CHAR(SYSDATE,'MON DD, YYYY HH:MI:SS AM','NLS_DATE_LANGUAGE=ENGLISH') FROM DUAL;
표기법 포맷 뒤에 있는 조건에 'NLS_DATE_LANGUAGE=ENGLISH' 조건을 넣으면 영어가 나오게 됩니다!
JUN 15, 2023 07:46:30 PM
이런 식으로 말이죠.
요일 표시(한국어 & 영어버전)
SELECT TO_CHAR(SYSDATE,'DAY') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DAY', 'NLS_DATE_LANGUAGE=ENGLISH') FROM DUAL;
목요일
THURSDAY
DAY 포맷을 사용하면 요일이 나옵니다.
3. 시간 계산(년, 월, 일 덧셈, 뺄셈)
기간을 저장하고 차이를 보는 것을 알아보겠습니다.
CREATE TABLE date_test(
id VARCHAR2(100) PRIMARY KEY,
mydate DATE NOT NULL
)
INSERT INTO date_test(id,mydate) VALUES('joy',sysdate);
INSERT INTO date_test(id,mydate) VALUES('peace',to_date('2023-1-11','YYYY-MM-DD'));
INSERT INTO date_test(id,mydate) VALUES('happy',to_date('2022-2-22','YYYY-MM-DD'));
이렇게 두 날짜를 넣어보겠습니다.
덧셈, 뺄셈
SELECT id,mydate,mydate-1 FROM date_test;
확인해 보시면 하루가 빠진 날짜가 나오게 됩니다.
덧셈도 마찬가지입니다.
또한, 두 개의 날짜 사이의 차이도 뺄셈으로 확인하면 됩니다. 소수점 부분을 제거하고 싶으면 trun을 이용합니다.
(truncate : 길이를 줄이다 [짧게 하다])
SELECT id,mydate,trunc(sysdate-mydate) FROM date_test;
이런 식으로 확인합니다.
월, 년도 비교하기
-- 몇개월 경과 months_between()
SELECT id,mydate,trunc(months_between(sysdate,mydate)) FROM date_test;
-- 몇년 경과 months_between()/12
SELECT id,mydate,trunc(months_between(sysdate,mydate)/12) FROM date_test;
months_between을 이용하여 월과 연도를 비교할 수 있습니다.
년도를 비교하는 함수는 따로 없지만 12만 나누면 년도를 알 수 있습니다.
아마도 월을 비교하는 것은 일수가 매달 다르기 때문에 생겨났겠죠?
소감
오늘은 ORACLE로 시간을 다루는 법을 알아보았습니다. 요새 AI 때문에 ORACLE의 주가가 많이 오르고 있더라고요. 이유는 잘 모르겠지만 제가 사용하고 있는 ORACLE이 승승장구했으면 좋겠습니다.
ORACLE의 주주가 아니고 절대 투자 권유의 글이 아닙니다. 하하하. 🤣
오늘은 같이 하는 동료와의 대화로 오늘의 글을 마무리해보려고 합니다.
제가 같이 하는 동료분은 운동을 좋아하시는 분인데, 제가 이런 말씀을 드렸습니다.
호소세 : 운동을 할 때 다른 사람들이 볼까봐 약간 .... 부끄러워요.
동료분 : 남의 시선을 신경쓰지마세요. 자신만을 바라봐요.
이때 또 느꼈습니다.
어떠한 일을 할 때 일의 과정에서 자신을 속이지 않고 한다면 그 일은 아주 위대한 일이 될 것이라는 것을요. 자기 자신을 속이지 않고 과정을 지속하면 더 멋진 내일의 자신을 만날 수 있지 않을까라는 깊은 생각을 하게 해 주었습니다.
또한, 남들과 비교하지 않는 삶을 살면서 행복을 추구하고 싶다는 생각도 하게 되었습니다.
감사합니다.
'코딩 개발 > ORACLE' 카테고리의 다른 글
[ORACLE] - NVL, NVL2 함수 (Null Value) (0) | 2023.09.24 |
---|---|
DBeaver - CSV 파일 내보내기 및 한글 깨짐 이슈 해결 (1) | 2023.08.30 |
ORACLE - JOIN (ANSI SQL, ORACLE JOIN, INNER JOIN, OUTER JOIN) (2) | 2023.05.11 |
ORACLE - Foreign Key 제약 (2) | 2023.05.09 |
ORACLE - IN, NOT IN 연산자 (feat. SEQUENCE) (3) | 2023.05.08 |