DATEADD
DATEADD
DATEADD()는 지정한 날짜 또는 시간 단위(part)의 값을 날짜, 시간, 타임스탬프에 더해요.
별칭(Aliases):
TIMEADD , TIMESTAMPADD
함께 보기:
ADD_MONTHS
본문
문법
DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
인자
date_or_time_part
더하려는 시간 단위를 나타내요. 예를 들어 이틀을 더하려면 day를 지정해요. 이 단위는 지원되는 날짜 및 시간 단위(Supported date and time parts)에 나열된 값 중 하나여야 해요.
value
더하려는 시간 단위의 수예요. 예를 들어 시간 단위가 day이고 이틀을 더하려면 2를 지정하고, 이틀을 빼려면 -2를 지정해요.
date_or_time_expr
date_or_time_expr은 날짜, 시간, 타임스탬프로 평가되어야 해요. 더하려는 값의 기준이 되는 날짜, 시간, 타임스탬프예요. 예를 들어 2024년 8월 1일에 이틀을 더하려면 '2024-08-01'::DATE를 지정해요. 데이터 타입이 TIME이면 date_or_time_part는 일(day)보다 작은 시간(시간·분 등) 단위여야 해요. 입력 데이터 타입이 DATE이고 date_or_time_part가 시간 이하 단위라면 입력 값은 거부되지 않고, 대신 시간·분·초·초 단위 분수가 모두 0으로 초기화된 타임스탬프(예: 지정한 날짜의 자정)로 취급돼요.
반환
date_or_time_expr이 시간(time)이면 반환 데이터 타입은 시간이에요.
date_or_time_expr이 타임스탬프이면 반환 데이터 타입은 타임스탬프예요.
date_or_time_expr이 날짜(date)이면:
-
date_or_time_part가day이상(예:month,year)이면 함수는DATE값을 반환해요. -
date_or_time_part가 일(day)보다 작으면(예:hour,minute,second) 함수는TIMESTAMP_NTZ값을 반환하며, 그 날짜의 시작 시간은00:00:00.000이에요.
사용 지침
date_or_time_part가 year, quarter, month(또는 그 변형)일 때, 결과 월의 일수가 원래 날짜의 일수보다 적으면 결과의 일(day)이 원래 일과 다를 수 있어요.
예제
TIMEADD와 TIMESTAMPADD 함수는 DATEADD 함수의 별칭이에요. 예제에서 이 세 함수 중 아무거나 사용해도 같은 결과를 반환해요.
날짜에 연도 더하기:
SELECT TO_DATE('2022-05-08') AS original_date,
DATEADD(year, 2, TO_DATE('2022-05-08')) AS date_plus_two_years;
+---------------+---------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS |
|---------------+---------------------|
| 2022-05-08 | 2024-05-08 |
+---------------+---------------------+
날짜에서 연도 빼기:
SELECT TO_DATE('2022-05-08') AS original_date,
DATEADD(year, -2, TO_DATE('2022-05-08')) AS date_minus_two_years;
+---------------+----------------------+
| ORIGINAL_DATE | DATE_MINUS_TWO_YEARS |
|---------------+----------------------|
| 2022-05-08 | 2020-05-08 |
+---------------+----------------------+
날짜에 2년과 2시간 더하기. 먼저 타임스탬프 출력 형식을 설정하고, 테이블을 만들고, 데이터를 삽입해요:
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9';
CREATE TABLE datetest (d date);
INSERT INTO datetest VALUES ('2022-04-05');
날짜에 2년과 2시간을 더하는 쿼리 실행:
SELECT d AS original_date,
DATEADD(year, 2, d) AS date_plus_two_years,
TO_TIMESTAMP(d) AS original_timestamp,
DATEADD(hour, 2, d) AS timestamp_plus_two_hours
FROM datetest;
+---------------+---------------------+-------------------------+--------------------------+
| ORIGINAL_DATE | DATE_PLUS_TWO_YEARS | ORIGINAL_TIMESTAMP | TIMESTAMP_PLUS_TWO_HOURS |
|---------------+---------------------+-------------------------+--------------------------|
| 2022-04-05 | 2024-04-05 | 2022-04-05 00:00:00.000 | 2022-04-05 02:00:00.000 |
+---------------+---------------------+-------------------------+--------------------------+
결과 월과 일수가 같거나 더 많은 월의 날짜에 한 달 더하기. 예를 들어 날짜가 1월 31일이면 한 달을 더해도 2월 31일이 반환되면 안 돼요.
SELECT DATEADD(month, 1, '2023-01-31'::DATE) AS date_plus_one_month;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-02-28 |
+---------------------+
결과 월보다 일수가 적은 월의 날짜에 한 달 더하기. 2월 28일에 한 달을 더하면 3월 28일이 돼요.
SELECT DATEADD(month, 1, '2023-02-28'::DATE) AS date_plus_one_month;
+---------------------+
| DATE_PLUS_ONE_MONTH |
|---------------------|
| 2023-03-28 |
+---------------------+
시간에 시간 더하기:
SELECT TO_TIME('05:00:00') AS original_time,
DATEADD(hour, 3, TO_TIME('05:00:00')) AS time_plus_three_hours;
+---------------+-----------------------+
| ORIGINAL_TIME | TIME_PLUS_THREE_HOURS |
|---------------+-----------------------|
| 05:00:00 | 08:00:00 |
+---------------+-----------------------+