본문 바로가기
IT/PROGRAM

오라클(Oracle) 날짜 포멧 SYSDATE . 유용한 날짜함수들

by SidePower 2021. 4. 9.

 

오라클 사용할 때 필수로 숙지해야 될 게 바로

날짜 이용과 조작일 거예요.

 

날짜에 대해 간단하게 정리합니다.

 

 

 

SYSDATE

쿼리문을 실행하는 순간의 날짜와 시간, 분, 초를 알려줍니다.

조회하면 기본적으로 「년-월-일 시:분:초」로 표시됩니다.

자료형은 DATE 이며 문자열로 표현하기 위해서는

문자열 변환 함수 TO_CHAR 를 사용해야 됩니다.

 

표현 → TO_CHAR(SYSDATE,'날짜 포맷')

 

반대로

문자열을 날짜형으로 변형할 때는 TO_DATE('날짜 문자열','날짜 포맷')

표현 TO_DATE('2021-04-05','YYYY-MM-DD')

 

 날짜 포맷

YYYY : 네자리 년도 , 2020 , 2021 , 2022 ....

YY : 두자리 년도 . 20 , 21 ,22 ...

MM : 월 . 01 , 02 .. 12

DD : 일자 . 01 , 02 .. 31 

HH : 시간 . 01 , 02 .. 12

HH24 : 24시간 . 00, 02 ... 23

MI : 분 . 00 . 01 .. 59

SS : 초 . 00 , 01 .. 59

 

 날짜 포맷을 이용하기

원하는 날짜 포맷을 이용해서 맘대로 표현할 수 있습니다.

날짜 포맷 문자 외에는 원하시는 문자를 넣으시면 됩니다.

YYYY-MM-DD → 2021-04-05

YYYY/MM/DD → 2021/04/05

YYYY년 MM월 DD일 → 2021년 04월 05일

YYYY년 MM월 DD일 HH24시 MI분 SS초 → 2021년 04월 05일 14시 40분 59초

등등..

 

SELECT
'날짜 포맷 알아보기

-- 1) 쿼리 실행된 날짜 → 2021-04-05
, TO_CHAR(SYSDATE,'YYYY-MM-DD')     

-- 2) 쿼리 실행된 날짜 → 21-04-05
, TO_CHAR(SYSDATE,'YY-MM-DD')     

-- 3) 쿼리 실행된 일시 → 2021-04-05 02:40:59

, TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')     

-- 4) 쿼리 실행된 24시간 일시 → 2021-04-05 14:40:59

, TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')    

FROM DUAL

 

 

 날짜 연산 - 일자

며칠 뒤 , 며칠 전 날짜 알아보기

 

▩ 공식 

날짜 +/- 숫자 = 날짜의 숫자 전과 후 경과된 날짜

날짜1 - 날짜2 = 숫자 (날짜1에서 날짜2까지의 경과 일자)

날짜1 + 날짜2 = 계산 불능

예를 들어

2021-04-05 + 2021-04-05 = 4042-08-10

이런 계산은 사람만이 생각으로 가능하지만 컴퓨터는 불가능합니다.^^;;

SELECT
'날짜 연산 알아보기

-- 1) 쿼리 실행된 날짜            → 2021-04-05

, TO_CHAR(SYSDATE,'YYYY-MM-DD') 

-- 2) 쿼리 실행된 날짜 + 1일    → 2021-04-06

, TO_CHAR(SYSDATE + 1 ,'YYYY-MM-DD')      

-- 3) 쿼리 실행된 날짜 + 10일  → 2021-04-15
, TO_CHAR(SYSDATE + 10 ,'YYYY-MM-DD')     

-- 4) 쿼리 실행된 날짜 - 1일    → 2021-04-04
, TO_CHAR(SYSDATE - 1 ,'YYYY-MM-DD')     

-- 5) 쿼리 실행된 날짜 - 100일 → 2020-12-26
, TO_CHAR(SYSDATE - 100 ,'YYYY-MM-DD')   

-- 6) 날짜 - 날짜 . 2021-04-05 - 2021-04-01  →  4
, TO_DATE('2021-04-05','YYYY-MM-DD')  - TO_DATE('2021-04-01','YYYY-MM-DD') 

-- 7) 날짜 - 날짜 . 2021-04-01 - 2021-04-05  →  -4
, TO_DATE('2021-04-01','YYYY-MM-DD')  - TO_DATE('2021-04-05','YYYY-MM-DD') 
     
FROM DUAL

 

 날짜 연산 - 초단위 연산

초단위 표현
1분 : 60초
1시간 : 60초 × 60 = 3600초
하루 24시간 : 60초 × 60 × 24시간 = 86400초


SELECT

'날짜 초단위 연산 알아보기

-- 1) 쿼리 실행된 날짜 → 2021-04-05

, TO_CHAR(SYSDATE,'YYYY-MM-DD')                    

-- 2) 쿼리 실행된 일시 → 2021-04-05 02:40:10
, TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')       

-- 3) 쿼리 실행된 24 일시 → 2021-04-05 14:40:10

, TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')   

-- 4) 1초 뒤 → 2021-04-05 14:40:11
, TO_CHAR(SYSDATE + 1/(60×60×24),'YYYY-MM-DD HH24:MI:SS')   

-- 5) 1초 전 → 2021-04-05 14:40:09
, TO_CHAR(SYSDATE - 1/(60×60×24),'YYYY-MM-DD HH24:MI:SS')    

-- 6) 1분 뒤 → 2021-04-05 14:41:10
, TO_CHAR(SYSDATE + 1/(60×24),'YYYY-MM-DD HH24:MI:SS')   

-- 7) 1시간 뒤 → 2021-04-05 15:40:10
, TO_CHAR(SYSDATE + 1/(24),'YYYY-MM-DD HH24:MI:SS')   

-- 8) 2초 뒤 → 2021-04-05 14:40:12
, TO_CHAR(SYSDATE + 2/(60×60×24),'YYYY-MM-DD HH24:MI:SS')  

-- 9) 2초 전 → 2021-04-05 14:40:08
, TO_CHAR(SYSDATE - 2/(60×60×24),'YYYY-MM-DD HH24:MI:SS')  

-- 10) 2분 뒤 → 2021-04-05 14:42:10
, TO_CHAR(SYSDATE + 2/(60×24),'YYYY-MM-DD HH24:MI:SS')  

-- 11) 2시간 뒤 → 2021-04-05 17:40:10
, TO_CHAR(SYSDATE + 2/(24),'YYYY-MM-DD HH24:MI:SS')  

FROM DUAL

 

 ADD_MONTHS

날짜에서 지정된 개월수만큼 경과된 일자를 확인합니다.

ADD_MONTHS(날짜, 개월수)

SELECT
'날짜 함수들 사용'

,SYSDATE   -- 2021/04/05 02:40:10

-- 1) 3개월 뒤 날짜 → 2021/07/05 02:40:10

,ADD_MONTHS(SYSDATE,3)

-- 2) 3개월 전 날짜 → 2021/01/05 02:40:10
,ADD_MONTHS(SYSDATE,-3)

-- 3) 위 결과를 보기 좋게 일자로 변황 → 2021-01-05
,TO_CHAR(ADD_MONTHS(SYSDATE,-3),'YYYY-MM-DD')

FROM DUAL

 

 NEXT_DAY

날짜 이후 지정된 다음 요일이 되는 일자를 확인합니다.

NEXT_DAY(날짜,'요일')

 

요일 표현

한글 : 토요일 또는 토 

영문 : SUNDAY 또는 SUM (오라클 영문 설치 버전)

숫자 : 일 월 화 수 목 금 토 순으로 숫자 1 2 3 ... 7

1 : 일요일

2 : 월요일

3 : 화요일

4 : 수요일

5 : 목요일

6 : 금요일

7 : 토요일

SELECT
'날짜 함수들 사용'

,SYSDATE   -- 2021/04/05 02:40:10

-- 1) 오늘 이후 토요일 → 2021/04/10 02:40:10

,NEXT_DAY(SYSDATE,'토요일')

-- 2) 오늘 이후 월요일 → 2021/01/12 02:40:10
,NEXT_DAY(SYSDATE,'월')

-- 3) 오늘 이후 7 : 토요일 → 2021/01/10 02:40:10
,NEXT_DAY(SYSDATE,7)

-- 4) 위의 결과를 보기 좋게 일자로 변환 → 2021-01-10
,TO_CHAR(NEXT_DAY(SYSDATE,7),'YYYY-MM-DD')

FROM DUAL

 

 LAST_DAY

지정된 날짜에서 해당 달의 마지막 일자를 확인합니다.

LAST_DAY(날짜)

날짜 값으로 DATE 자료형과 문자열 모두 사용 가능합니다.

SELECT
'날짜 함수들 사용'

,SYSDATE   -- 2021/04/05 02:40:10

-- 1) 2021년 04월의 마지막 날짜 → 2021/04/30 02:40:10

,LAST_DAY(SYSDATE)

-- 2) 2021년 01의 마지막 날짜 → 2021/01/31 00:00:00
,LAST_DAY('20210115')

-- 3) 위의 결과를 보기좋게 일자로 변환 → 2021-01-31
,TO_CHAR(LAST_DAY('20210115'),'YYYY-MM-DD')

FROM DUAL

 

 MONTHS_BETWEEN

두개의 날짜 사이의 개월수를 확인합니다.

MONTHS_BETWEEN(날짜1,날짜2)

날짜1을 기준으로 계산되므로 

날짜2가 나중 날짜면 - 값 , 이전 날짜면 + 값으로 표시됩니다.

 

날짜1과 날짜 2가 만약에 시:분:초 차이가 있다면 소수점 값으로 표시됩니다.

 

그리고 날짜 값으로 DATE 자료형과 문자열 모두 사용 가능합니다.

SELECT
'날짜 함수들 사용'

,SYSDATE   -- 2021/04/05 02:40:10

-- 1) 2021년 04월에서 2021년 01월까지 개월수 → 3

,MONTHS_BETWEEN('20210401','20210101')

-- 2) 2021년 01월에서 2021년 04월까지 개월수 → -3
,MONTHS_BETWEEN('20210101','20210401')

-- 3) SYSDATE에서 2021년 04월까지 개월수 →3.323234232423
,MONTHS_BETWEEN(SYSDATE,'20210101')

FROM DUAL

 

 TRUNC를 이용한 날짜 버림

SELECT
'날짜 함수들 사용'

,SYSDATE   -- 2021/04/05 02:40:10

-- 1) 년도까지만 값을 유지 나머지 다 버림 → 2021/01/01 00:00:00
,TRUNC(SYSDATE,'YYYY')

-- 2) 월까지만 값을 유지 나머지 다 버림 → 2021/04/01 00:00:00
,TRUNC(SYSDATE,'MM')

-- 3) 일까지만 값을 유지 나머지 다 버림 → 2021/04/05 00:00:00
,TRUNC(SYSDATE,'DD')

-- 4) 시까지만 값을 유지 나머지 다 버림 → 2021/04/05 02:00:00
,TRUNC(SYSDATE,'HH24')

-- 5) 분까지만 값을 유지 나머지 다 버림 → 2021/04/05 02:40:00
,TRUNC(SYSDATE,'MI')

FROM DUAL

 

 

감사합니다.

반응형

댓글