

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# DATEDIFF 함수
<a name="r_DATEDIFF_function"></a>

DATEDIFF는 두 날짜 또는 시간 표현식에서 날짜 부분의 차이점을 반환합니다.

## 구문
<a name="r_DATEDIFF_function-synopsis"></a>

```
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
```

## 인수
<a name="r_DATEDIFF_function-arguments"></a>

 *datepart*   
함수가 작동하는 날짜 또는 시간 값의 특정 부분(년, 월 또는 일, 시, 분, 초, 밀리초 또는 마이크로초)입니다. 자세한 내용은 [날짜 또는 타임스탬프 함수의 날짜 부분](r_Dateparts_for_datetime_functions.md) 섹션을 참조하세요.  
특히 DATEDIFF는 두 표현식이 서로 교차하는 날짜 부분 경계의 수를 결정합니다. 예를 들어 두 날짜 `12-31-2008`과 `01-01-2009` 사이의 연도 차이를 계산한다고 가정합니다. 이 경우 함수는 두 날짜가 단 하루 차이임에도 불구하고 1년을 반환합니다. 하지만 두 타임스탬프인 `01-01-2009 8:30:00`과 `01-01-2009 10:00:00` 사이의 시간차를 구하는 경우에는 함수 결과로 2시간이 반환됩니다. 하지만 두 타임스탬프인 `8:30:00`과 `10:00:00` 사이의 시간차를 구하는 경우에는 함수 결과로 2시간이 반환됩니다.

*date*\$1*time*\$1*timetz*\$1*timestamp*  
DATE, TIME, TIMETZ 또는 TIMESTAMP 열 또는 암시적으로 DATE, TIME, TIMETZ 또는 TIMESTAMP로 변환하는 표현식입니다. 표현식에는 지정하는 날짜 또는 시간 부분이 모두 포함되어야 합니다. 두 번째 날짜 또는 시간이 첫 번째 날짜 또는 시간보다 이후인 경우에는 결과 값이 양수입니다. 하지만 두 번째 날짜 또는 시간이 첫 번째 날짜 또는 시간보다 이전인 경우에는 결과 값이 음수입니다.

## 반환 타입
<a name="r_DATEDIFF_function-return-type"></a>

BIGINT

## DATE 열이 있는 예
<a name="r_DATEDIFF_function-examples"></a>

다음은 두 리터럴 날짜 값 사이의 차이 값(주 수)을 구하는 예입니다.

```
select datediff(week,'2009-01-01','2009-12-31') as numweeks;

numweeks
----------
52
(1 row)
```

다음은 두 리터럴 날짜 값 사이의 차이 값(시간)을 구하는 예입니다. 날짜의 시간 값을 제공하지 않는 경우 기본값은 00:00:00입니다.

```
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03');
            
date_diff
----------
53
(1 row)
```

다음은 두 리터럴 TIMESTAMETZ 값 사이의 차이(일수)를 구하는 예시입니다.

```
Select datediff(days, 'Jun 1,2008  09:59:59 EST', 'Jul 4,2008  09:59:59 EST')
         
date_diff
----------
33
```

다음은 테이블의 동일한 행에 있는 두 날짜 사이의 차이 값(일)을 구하는 예입니다.

```
select * from date_table;

start_date |   end_date
-----------+-----------
2009-01-01 | 2009-03-23
2023-01-04 | 2024-05-04
(2 rows)

select datediff(day, start_date, end_date) as duration from date_table;
         
duration
---------
      81
     486
(2 rows)
```

다음은 이전 날짜와 오늘 날짜의 리터럴 값 사이에서 차이 값(분기 수)을 구하는 예입니다. 이번 예는 오늘 날짜가 2008년 6월 5일이라는 가정을 전제로 합니다. 날짜 부분은 전체 이름으로 또는 약어로 지정할 수 있습니다. DATEDIFF 함수에 사용되는 기본 열 이름은 DATE\$1DIFF입니다.

```
select datediff(qtr, '1998-07-01', current_date);

date_diff
-----------
40
(1 row)
```

다음은 SALES 테이블과 LISTING 테이블을 조인하여 두 테이블의 나열 이후 목록 1000부터 1005까지 티켓이 판매된 일수를 계산하는 예입니다. 두 목록에서 가장 길게 기다린 판매 일수는 15일이었고, 가장 짧은 기다린 판매 일수는 1일 미만이었습니다(0일).

```
select priceperticket,
datediff(day, listtime, saletime) as wait
from sales, listing where sales.listid = listing.listid
and sales.listid between 1000 and 1005
order by wait desc, priceperticket desc;

priceperticket | wait
---------------+------
 96.00         |   15
 123.00        |   11
 131.00        |    9
 123.00        |    6
 129.00        |    4
 96.00         |    4
 96.00         |    0
(7 rows)
```

다음은 판매자들이 모든 티켓이 판매될 때까지 기다린 평균 시간을 계산하는 예입니다.

```
select avg(datediff(hours, listtime, saletime)) as avgwait
from sales, listing
where sales.listid = listing.listid;

avgwait
---------
465
(1 row)
```

## TIME 열이 있는 예
<a name="r_DATEDIFF_function-examples-time"></a>

다음 예제 테이블 TIME\$1TEST에는 3개의 값이 삽입된 TIME\$1VAL(TIME 형식) 열이 있습니다.

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

다음 예에서는 TIME\$1VAL 열과 시간 리터럴 간의 시간 차이를 찾습니다.

```
select datediff(hour, time_val, time '15:24:45') from time_test;
         
 date_diff
-----------
        -5
        15
        15
```

다음 예에서는 두 리터럴 시간 값 간의 분 수 차이를 찾습니다.

```
select datediff(minute, time '20:00:00', time '21:00:00') as nummins;  
         
nummins 
---------- 
60
```

## TIMETZ 열이 있는 예
<a name="r_DATEDIFF_function-examples-timetz"></a>

다음 예제 테이블 TIMETZ\$1TEST에는 3개의 값이 삽입된 TIMETZ\$1VAL(TIMETZ 형식) 열이 있습니다.

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

다음 예에서는 TIMETZ 리터럴과 timetz\$1val 간의 시간 차이를 찾습니다.

```
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test;

numhours 
---------- 
0
-4
1
```

다음 예에서는 두 리터럴 TIMETZ 값 간의 시간 차이를 찾습니다.

```
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours;
         
numhours 
---------- 
1
```