본문 바로가기
Dev. Handbook/SQL, Oracle, MariaDB

[Oracle] 내장 함수 : 날짜 함수, 시간 함수

by breezyday 2022. 5. 10.

Oracle에서 사용할 수 있는 날짜 함수와 시간 함수들은 다음과 같습니다.

1. 날짜 함수, 시간 함수

 

함수명 양식 기능 설명
SYSDATE
SYSTIMESTAMP
SYSDATE
SYSTIMESTAMP
현재 일자와 시간을 DATE형으로 반환
현재 TIMESTAMP를 반환
CURRENT_DATE
CURRENT_TIMESTAMP
CURRENT_DATE
CURRENT_TIMESTAMP
현재 세션의 일자와 시간을 DATE형으로 반환
현재 세션의 TIMESTAMP를 반환
ADD_MONTHS ADD_MONTHS(date, int) 날짜(date)에 숫자(int)만큼의 월을 더한 날짜를 반환
EXTRACT EXTRACT(format FROM DATE '날짜') 날짜에서 형식(format)의 값을 구한다
형식: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
LAST_DAY LAST_DAY(date) 날짜(date)를 기준으로 해당 월의 마지막 일자를 반환
NEXT_DAY NEXT_DAY(date, weekstr) 날짜(date)를 기준으로 앞으로 다가올 날짜의 요일(weekstr)에 명시한 요일의 날짜를 반환
weekstr: 일요일~토요일 NLS 기준으로 동작, 영어일 경우 SUNDAY~MONDAY
MONTHS_BETWEEN MONTHS_BETWEEN(date1, date2) 두 날짜 사이의 개월수를 반환, 앞의 날짜가 뒤의 날짜보다 빠르다면 음수를 반환
ROUND
TRUNK
ROUND(date, format)
TRUNK(date, format)
형식(format)에 따라 반올림한 날짜를 반환
형식(format)에 따라 버림 한 날짜를 반환

1.1 SYSDATE, SYSTIMESTAMP

SYSDATE            : 현재 일자와 시간을 DATE형으로 반환
SYSTIMESTAMP : 현재 TIMESTAMP를 반환

 

SELECT SYSDATE,    SYSTIMESTAMP                         FROM DUAL;
       ----------  ------------------------------------
       2022/04/28  22/04/28 12:36:57.381000000 +09:00

 

1.2 CURRENT_DATE, CURRENT_TIMESTAMP

CURRENT_DATE            : 현재 세션의 일자와 시간을 DATE형으로 반환
CURRENT_TIMESTAMP :
현재 세션의 TIMESTAMP를 반환

SESSTIONTIMEZONE     : 현재 세션의 TIMEZONE을 반환

 

SYSDATE, SYSTIMESTAMP와 유사하지만 CURRENT는 현재 세션의 DATE, TIMESTAMP를 보여주고, SYS는 시스템의 DATE, TIMESTAMP를 보여준다. 

 

SELECT SESSIONTIMEZONE, SYSTIMESTAMP, CURRENT_TIMESTAMP FROM DUAL;
       ---------------  -------  ------------
       [Asia/Seoul]     [22/05/09 18:15:10.450000000 +09:00]
                                      [22/05/09 18:15:10.450000000 +09:00]

-- TIME ZONE을 홍콩으로 변경
ALTER SESSION SET TIME_ZONE = '+8:0';

-- 세션에 따라 시간이 1시간 차이가 남
SELECT SESSIONTIMEZONE, SYSDATE, CURRENT_DATE FROM DUAL;
       ---------------  -------  ------------
       [Asia/Seoul]     [22/05/09 18:15:10.450000000 +09:00]
                                      [22/05/09 17:15:10.450000000 +08:00]

1.3 ADD_MONTHS(date, int)

ADD_MONTHS(date, int) : 날짜(date)에 숫자(int)만큼의 월을 더한 날짜를 반환

 

SELECT ADD_MONTHS(SYSDATE, 1), ADD_MONTHS(SYSDATE, -1) FROM DUAL;
       ----------------------  -----------------------
			 2022/05/28              2022/03/28

-- 월의 마지막 날짜인 경우 그 달의 마지막 날짜로 변경됨
SELECT ADD_MONTHS('20220331', 1), ADD_MONTHS('20220331', -1) FROM DUAL;
       -------------------------  --------------------------
			 2022/04/30              2022/02/28

 

1.4 EXTRACT(format FROM DATE '날짜')

EXTRACT(format FROM DATE '날짜') : 날짜에서 형식(format)의 값을 구한다
형식: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

 

SELECT EXTRACT(YEAR FROM SYSDATE), EXTRACT(YEAR FROM DATE '2020-01-01') FROM DUAL;
       --------------------------  ------------------------------------
       [2022]                      [2020]
       
SELECT EXTRACT(MINUTE FROM SYSTIMESTAMP), EXTRACT(SECOND FROM SYSTIMESTAMP) FROM DUAL;
       ---------------------------------  ---------------------------------
       [27]                               [46.758]

 

1.5 LAST_DAY(date)

LAST_DAY(date) : 날짜(date)를 기준으로 해당 월의 마지막 일자를 반환

 

SELECT LAST_DAY(SYSDATE), LAST_DAY('2022-05-01') FROM DUAL;
       -----------------  ----------------------
       2022/04/30         2022/05/31

 

1.6 NEXT_DAY(date, weekstr)

NEXT_DAY(date, weekstr) : 날짜(date)를 기준으로 앞으로 다가올 날짜의 요일(weekstr)에 명시한 요일의 날짜를 반환
weekstr: 일요일~토요일 NLS 기준으로 동작, 영어일 경우 SUNDAY~MONDAY

 

SELECT NEXT_DAY(SYSDATE, '월요일'), NEXT_DAY(SYSDATE, '화요일') FROM DUAL;
       ---------------------------  ---------------------------
       2022-05-02                   2022-05-03

 

1.7 MONTHS_BETWEEN(date1, date2)

MONTHS_BETWEEN(date1, date2) : 두 날짜 사이의 개월 수를 반환, 앞의 날짜가 뒤의 날짜보다 빠르다면 음수를 반환

 

SELECT MONTHS_BETWEEN('2022-09-08', '2022-03-08') FROM DUAL;
       ------------------------------------------
       6

SELECT MONTHS_BETWEEN('2022-03-08', '2022-09-08') FROM DUAL;
       ------------------------------------------
       -6

SELECT MONTHS_BETWEEN('2022-09-08', '2022-03-29') FROM DUAL;
       ------------------------------------------
       5.32258064516129032258064516129032258065

 

1.8 ROUND(date, format), TRUNK(date, format)

ROUND(date, format) : 형식(format)에 따라 반올림한 날짜를 반환
TRUNK(date, format) : 형식(format)에 따라 버림 한 날짜를 반환

 

SELECT SYSDATE,    ROUND(SYSDATE, 'month'), TRUNC(SYSDATE, 'month') FROM DUAL;
       -------     -----------------------  ----------------------
       2022/04/28  2022/05/01               2022/04/01

SELECT ROUND(TO_DATE('2022-04-10'), 'month') FROM DUAL;
       -------------------------------------
       2022/04/01

 

 

 

참고

https://docs.oracle.com/database/121/SQLRF/functions002.htm#SQLRF20033

 

 

 

 

 

댓글