반응형
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 |
반응형
'데이터베이스(DB: Database) > SQL' 카테고리의 다른 글
[SQL] 오라클(Oracle) NULL 관련 함수 정리 (0) | 2023.06.05 |
---|---|
[SQL] 오라클(Oracle) 형변환 함수 정리 (0) | 2023.06.03 |
[SQL] 오라클(Oracle) 문자열 함수 정리 (0) | 2023.05.26 |
[SQL] 오라클(Oracle) 숫자 함수 정리 (0) | 2023.04.26 |
[SQL] Oracle과 MySQL의 문법 차이 정리 (0) | 2023.04.19 |