TIMEADD

TIMEADD

TIMEADD는 지정한 날짜 또는 시간 부분의 지정한 값을 날짜·시간·타임스탬프에 더하는 함수예요. DATEADD의 별칭이에요.

출처: Snowflake SQL Reference

본문

카테고리: 날짜 & 시간 함수

구문 (Syntax)

TIMEADD( <date_or_time_part> , <value> , <date_or_time_expr> )

인자 (Arguments)

<date_or_time_part> — 더하려는 시간의 단위를 나타내요. 예를 들어 이틀을 더하려면 day를 지정해요. 이 단위는 지원되는 날짜 및 시간 부분에 나열된 값 중 하나여야 해요.

<value> — 더하려는 시간 단위의 수예요. 예를 들어 시간 단위가 day이고 이틀을 더하려면 2를 지정해요. 이틀을 빼려면 -2를 지정해요.

<date_or_time_expr> — date_or_time_expr은 date, time, timestamp로 평가되어야 해요. 이것은 값을 더하려는 날짜·시간·타임스탬프예요. 예를 들어 2024년 8월 1일에 이틀을 더하려면 '2024-08-01'::DATE를 지정해요.

데이터 타입이 TIME이면 date_or_time_part는 일이나 그보다 큰 단위가 아니라, 시간(hours) 또는 그보다 작은 단위여야 해요.

입력 데이터 타입이 DATE이고 date_or_time_part가 시간 또는 그보다 작으면, 입력 값은 거부되지 않고 대신 시·분·초·초의 분수가 모두 처음에 0으로 설정된 TIMESTAMP(예: 지정한 날짜의 자정)로 취급돼요.

반환값 (Returns)

date_or_time_expr이 time이면 반환 데이터 타입은 time이에요. date_or_time_expr이 timestamp면 반환 데이터 타입은 timestamp예요. date_or_time_expr이 date이면:

  • date_or_time_part가 day 이상(예: month, year)이면 DATE 값을 반환해요.
  • date_or_time_part가 하루보다 작으면(예: hour, minute, second), 해당 날짜의 시작 시각을 00:00:00.000으로 한 TIMESTAMP_NTZ 값을 반환해요.

사용 시 유의사항 (Usage notes)

date_or_time_part가 year, quarter, month(또는 그 변형)일 때, 결과 월이 원래 일(day of month)보다 적은 일수를 가지면 결과의 일(day)이 원래 일과 다를 수 있어요.

예시 (Examples)

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              |
+---------------+-----------------------+

더 알아보기