DATEADD 함수 - Amazon Redshift

DATEADD 함수

DATE, TIME, TIMETZ 또는 TIMESTAMP 값을 지정된 간격만큼 늘립니다.

구문

DATEADD( datepart, interval, {date|time|timetz|timestamp} )

인수

datepart

함수가 작동하는 날짜 부분(예: 년, 월, 일 또는 시)입니다. 자세한 내용은 날짜 또는 타임스탬프 함수의 날짜 부분 단원을 참조하십시오.

interval

대상 표현식에 합산할 간격(일 수 등)을 지정한 정수입니다. 음의 정수는 간격을 감산합니다.

date|time|timetz|timestamp

DATE, TIME, TIMETZ 또는 TIMESTAMP 열 또는 암시적으로 DATE, TIME, TIMETZ 또는 TIMESTAMP로 변환하는 표현식입니다. DATE, TIME, TIMETZ 또는 TIMESTAMP 표현식에 지정한 날짜 부분이 포함되어야 합니다.

반환 타입

입력 데이터 형식에 따라 TIMESTAMP, TIME 또는 TIMETZ입니다.

DATE 열이 있는 예

다음은 DATE 테이블에 존재하는 11월 데이터에 각각 30일을 합산하는 예입니다.

select dateadd(day,30,caldate) as novplus30 from date where month='NOV' order by dateid; novplus30 --------------------- 2008-12-01 00:00:00 2008-12-02 00:00:00 2008-12-03 00:00:00 ... (30 rows)

다음 예에서는 리터럴 날짜 값에 18개월을 추가합니다.

select dateadd(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)

DATEADD 함수에 사용되는 기본 열 이름은 DATE_ADD입니다. 날짜 값을 나타내는 기본 타임스탬프는 00:00:00입니다.

다음 예에서는 타임스탬프를 지정하지 않는 날짜 값에 30분을 추가합니다.

select dateadd(m,30,'2008-02-28'); date_add --------------------- 2008-02-28 00:30:00 (1 row)

날짜 부분은 전체 이름으로 또는 약어로 지정할 수 있습니다. 이 경우 m은 월이 아닌 분을 나타냅니다.

TIME 열이 있는 예

다음 예제 테이블 TIME_TEST에는 3개의 값이 삽입된 TIME_VAL(TIME 형식) 열이 있습니다.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

다음 예에서는 TIME_TEST 테이블의 각 TIME_VAL에 5분을 추가합니다.

select dateadd(minute,5,time_val) as minplus5 from time_test; minplus5 --------------- 20:05:00 00:05:00.5550 01:03:00

다음 예에서는 리터럴 시간 값에 8시간을 추가합니다.

select dateadd(hour, 8, time '13:24:55'); date_add --------------- 21:24:55

다음 예에서는 시간이 24:00:00을 초과하거나 00:00:00 미만인 경우를 보여줍니다.

select dateadd(hour, 12, time '13:24:55'); date_add --------------- 01:24:55

TIMETZ 열이 있는 예

이 예의 출력 값은 기본 표준 시간대인 UTC를 기준으로 합니다.

다음 예제 테이블 TIMETZ_TEST에는 3개의 값이 삽입된 TIMETZ_VAL(TIMETZ 형식) 열이 있습니다.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

다음 예에서는 TIMETZ_TEST 테이블의 각 TIMETZ_VAL에 5분을 추가합니다.

select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test; minplus5_tz --------------- 04:05:00+00 00:05:00.5550+00 06:03:00+00

다음 예에서는 리터럴 timetz 값에 2시간을 추가합니다.

select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00

TIMESTAMP 열이 있는 예시

이 예의 출력 값은 기본 표준 시간대인 UTC를 기준으로 합니다.

다음 예시 테이블 TIMESTAMP_TEST에는 3개의 값이 삽입된 TIMESTAMP_VAL(TIMESTAMP 형식) 열이 있습니다.

SELECT timestamp_val FROM timestamp_test; timestamp_val ------------------ 1988-05-15 10:23:31 2021-03-18 17:20:41 2023-06-02 18:11:12

다음 예시에서는 2000년 이전의 TIMESTAMP_TEST의 TIMESTAMP_VAL 값에만 20년을 더합니다.

SELECT dateadd(year,20,timestamp_val) FROM timestamp_test WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS'); date_add --------------- 2008-05-15 10:23:31

다음 예시에서는 초 표시기 없이 작성된 리터럴 타임스탬프 값에 5초를 추가합니다.

SELECT dateadd(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05

사용 노트

DATEADD(month, ...) 함수와 ADD_MONTHS 함수는 매월 마지막 날짜를 서로 다르게 처리합니다.

  • ADD_MONTHS: 합산하려는 날짜가 월의 마지막 날짜인 경우에는 월의 길이에 상관없이 항상 결과에 따른 월의 마지막 날짜가 반환됩니다. 예를 들어 다음과 같이 4월 30일에 1개월을 합산하면 5월 31일이 됩니다.

    select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
  • DATEADD: 합산하려는 날짜의 일 수가 결과에 따른 월보다 적은 경우에는 결과에 따른 월의 마지막 날짜가 아니고 해당하는 날짜가 반환됩니다. 예를 들어 다음과 같이 4월 30일에 1개월을 합산하면 5월 30일이 됩니다.

    select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)

DATEADD 함수는 dateadd(month, 12,…)를 사용할 때와 dateadd(year, 1, …)을 사용할 때 윤년 날짜인 2월 29일을 각각 다르게 처리합니다.

select dateadd(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select dateadd(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00