데이터베이스(DB: Database)/SQL

[SQL] 오라클(Oracle) 날짜 함수 정리

잇트루 2023. 5. 30. 00:06
반응형

SYSDATE

시스템의 현재 날짜 및 시간(yyyy-mm-dd hh24:mi:ss)을 반환한다.

  • 테이블 상으로는 시간이 보이지 않을 수 있으나, date 타입으로 시간 데이터를 가지고 있다.
  • +, - 연산자로 날짜의 일수를 더하기 및 빼기 연산할 수 있다.
SELECT SYSDATE as TODAY,
    SYSDATE + 1 as TOMORROW,
    SYSDATE - 1 as YESTERDAY
FROM dual;
TODAY TOMORROW YESTERDAY
2023-04-25 16:53:45 2023-04-26 16:53:45 2023-04-24 16:53:45

 

 

SYSTIMESTAMP

현재 날짜 및 시간을 밀리세컨드까지 표현하여 반환한다.

SELECT SYSTIMESTAMP,
    TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF') AS TIME,
FROm dual;
SYSTIMESTAMP TIME
2023-04-25 16:53:45.786 2023-04-25 16:53:45.786366

 

 

ADD_MONTHS(날짜, 숫자)

날짜 데이터의 월 단위를 입력 숫자 만큼 더하거나 뺀 날짜 하여 반환한다.

  • 날짜의 일은 변경되지않는다. (연도와 월만 변경)
  • 날짜의 이전 달 또는 다음 달에 일자가 존재하지 않으면 해당 월의 마지막 날짜를 가리킨다.
    • 2023-01-31에서 한 달을 더하면 2023-02-28이 된다.
SELECT SYSDATE AS TODAY,
    ADD_MONTHS(SYSDATE, 1) AS CASE1,
    ADD_MONTHS(SYSDATE, -1) AS CASE2,
    ADD_MONTHS(TO_DATE('2023-01-31'), 1) AS CASE3
FROm dual;
TODAY CASE1 CASE2 CASE3
2023-04-25 2023-05-25 2023-03-25 2023-02-28

 

 

MONTHS_BETWEEN(날짜1, 날짜2)

날짜1에서 날짜2를 뺄셈 연산을 하여 개월 수 차이를 반환한다.

SELECT MONTHS_BETWEEN(TO_DATE('2023-01-01'), TO_DATE('2022-01-01')) AS CASE1,
    MONTHS_BETWEEN(TO_DATE('2023-01-01'), TO_DATE('2024-01-01')) AS CASE2,
    MONTHS_BETWEEN(TO_DATE('2023-04-25'), TO_DATE('2023-01-01')) AS CASE3,
    MONTHS_BETWEEN(TO_DATE('2022-04-25'), TO_DATE('2023-12-31')) AS CASE4
FROM dual;
CASE1 CASE2 CASE3 CASE4
12 -12 3 -8
  • 일수 차이로 인해 소수점이 발생할 수도 있으며, TRUNC 함수를 통해 소수점 제거할 수 있다.
  • CASE2, CASE4와 같이 작은 날짜에서 큰 날짜를 빼기 연산을 하면 마이너스 값이 반환된다.
    • 절댓값 함수 ABS()를 통해 해결할 수 있다.
SELECT
ABS(
    TRUNC(
        MONTHS_BETWEEN(TO_DATE('2022-04-25'), TO_DATE('2023-12-31'))
    )
) AS CASE5
FROM dual;
CASE5
8

 

 

LAST_DAY(날짜)

입력한 날짜의 마지막 일에 해당하는 날짜를 반환한다.

월별 마지막 일자가 다른 문제를 쉽게 해결하기 위해 사용한다.

SELECT LAST_DAY(SYSDATE) AS CASE1,
    LAST_DAY(TO_DATE('2023-02-01')) AS CASE2,
    LAST_DAY(TO_DATE('2024-02-01')) AS CASE3,
    LAST_DAY(TO_DATE('2023-03-01')) AS CASE4,
    LAST_DAY(TO_DATE('2023-04-01')) AS CASE5
FROM dual;
CASE1 CASE2 CASE3 CASE4 CASE5
2023-04-30 2023-02-28 2024-02-29 2023-03-31 2023-04-30

 

 

ROUND(날짜, 기준)

입력 날짜를 연월일을 기준으로 반올림하여 반환한다. 기준에는 year, month, day 등의 문자열을 입력한다.

SELECT ROUND(TO_DATE('2023-07-05'), 'year') as CASE1,
    ROUND(TO_DATE('2023-06-05'), 'year') as CASE2,
    ROUND(TO_DATE('2023-06-16'), 'month') as CASE3,
    ROUND(TO_DATE('2023-06-15'), 'month') as CASE4,
    ROUND(TO_DATE('2023-06-15'), 'day') as CASE5,
    ROUND(TO_DATE('2023-06-14'), 'day') as CASE6
FROM dual;
CASE1 CASE2 CASE3 CASE4 CASE5 CASE6
2024-01-01 2023-01-01 2023-07-01 2023-05-01 2023-06-18 2023-06-11
  • ROUND(날짜, ‘year’) : 해당 연도의 월을 기준으로 반올림 계산
    • 6월 이하 버림, 7월 이상 올림
  • ROUND(날짜, ‘month’) : 해당 월의 일을 기준으로 반올림 계산
    • 15일 이하 버림, 16일 이상 올림
    • 2월인 경우에도 15일 이하 버림, 16일 이상 올림
  • ROUND(날짜, ‘day’) : 해당 날짜의 요일을 기준으로 반올림 계산
    • 한 주의 시작은 일요일로 계산
    • 입력 날짜가 일, 월, 화, 수이면 버림, 목, 금, 토이면 올림
    • 버릴 경우 일요일에 해당하는 날짜, 올릴 경우 토요일에 해당하는 날짜

 

 

TRUNC(날짜, 기준)

입력 날짜를 연월일을 기준으로 버림하여 반환한다. 기준에는 year, month, day 등의 문자열을 입력한다.

SELECT TRUNC(TO_DATE('2023-07-05'), 'year') as CASE1,
    TRUNC(TO_DATE('2023-06-05'), 'year') as CASE2,
    TRUNC(TO_DATE('2023-06-16'), 'month') as CASE3,
    TRUNC(TO_DATE('2023-06-15'), 'month') as CASE4,
    TRUNC(TO_DATE('2023-06-15'), 'day') as CASE5,
    TRUNC(TO_DATE('2023-06-14'), 'day') as CASE6
FROM dual;
CASE1 CASE2 CASE3 CASE4 CASE5 CASE6
2023-01-01 2023-01-01 2023-06-01 2023-06-01 2023-06-11 2023-06-11
  • TRUNC(날짜, ‘year’) : 해당 연도의 1월 1일로 반환
  • TRUNC(날짜, ‘month’) : 해당 월의 1일로 반환
  • TRUNC(날짜, ‘day’) : 해당 날짜의 가장 최근 일요일 날짜로 반환(일요일인 경우 그대로)

 

 

NEXT_DAY(날짜, 요일)

입력 날짜에서 입력한 요일의 가장 가까운 날짜를 반환한다.

  • 입력 날짜의 요일은 포함하지 않는다.
  • 한글, 영문, 숫자 등으로 요일 입력이 가능하다.
SELECT NEXT_DAY(TO_DATE('2023-01-01'), '월요일') AS CASE1,
    NEXT_DAY(TO_DATE('2023-01-01'), '화요일') AS CASE2,
    NEXT_DAY(TO_DATE('2023-01-01'), '수요일') AS CASE3,
    NEXT_DAY(TO_DATE('2023-01-01'), '목요일') AS CASE4,
    NEXT_DAY(TO_DATE('2023-01-01'), '금요일') AS CASE5,
    NEXT_DAY(TO_DATE('2023-01-01'), '토요일') AS CASE6,
    NEXT_DAY(TO_DATE('2023-01-01'), '일요일') AS CASE7
FROM dual;
  • 2023-01-01 (일)
CASE1 CASE2 CASE3 CASE4 CASE5 CASE6 CASE7
2023-01-02 2023-01-03 2023-01-04 2023-01-05 2023-01-06 2023-01-07 2023-01-08

 

입력 가능한 요일

NEXT_DAY(SYSDATE, '1')
NEXT_DAY(SYSDATE, '일요일')
NEXT_DAY(SYSDATE, '일')
NEXT_DAY(SYSDATE, 'SUNDAY')
NEXT_DAY(SYSDATE, 'SUN')
숫자 1 2 3 4 5 6 7
한글 일요일 월요일 화요일 수요일 목요일 금요일 토요일
 
영어 SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY
  SUN MON TUE WED THUR FRI SAT
반응형