- 카테고리:
DATEDIFF¶
요청된 날짜 또는 시간 부분을 기반으로 두 날짜, 시간 또는 타임스탬프 식 간의 차이를 계산합니다. 함수는 세 번째 인자에서 두 번째 인자를 뺀 결과를 반환합니다.
빼기 기호(-
)를 사용하여 한 날짜에서 다른 날짜를 빼서 두 날짜 사이의 차이를 계산할 수도 있습니다.
날짜, 시간 또는 타임스탬프에 시간 단위를 더하거나(예: 날짜에 2일을 더함) 시간 단위를 빼려면 DATEADD, TIMEADD 또는 TIMESTAMPADD 함수를 사용하면 됩니다.
- 참고 항목:
구문¶
DATEDIFF의 경우:
DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )
빼기 기호의 경우:
<date_expr2> - <date_expr1>
인자¶
DATEDIFF의 경우:
date_or_time_part
시간 단위. 지원되는 날짜 및 시간 부분 에 나열된 값 중 하나여야 합니다(예:
month
). 값은 문자열 리터럴이거나 따옴표로 묶지 않을 수 있습니다(예:'month'
또는month
).date_or_time_expr1
,date_or_time_expr2
비교할 값입니다. 날짜, 시간 또는 타임스탬프이거나, 날짜, 시간 또는 타임스탬프로 평가할 수 있는 식이어야 합니다.
date_or_time_expr1
값은date_or_time_expr2
에서 뺍니다.
빼기 기호의 경우:
date_expr1
,date_expr2
비교할 값입니다. 날짜이거나, 날짜로 평가할 수 있는 식이어야 합니다.
date_expr1
값은date_expr2
에서 뺍니다.
반환¶
DATEDIFF의 경우:
date_or_time_expr2
와 date_or_time_expr1
사이의 차이를 단위 수(초, 일 등)로 나타내는 정수를 반환합니다.
인자가 NULL인 경우 NULL을 반환합니다.
빼기 기호의 경우:
date_expr2
및 date_expr1
간의 일수 차이를 나타내는 정수를 반환합니다. (단위는 항상 일입니다.)
date_expr2
또는 date_expr1
이 NULL인 경우 오류를 반환합니다.
사용법 노트¶
DATEDIFF 및 빼기 기호 둘 다의 경우:
출력 값은 음수일 수 있습니다(예: -12일).
DATEDIFF의 경우:
이 함수는 연도, 분기, 월, 주, 일, 시간, 분, 초, 밀리초, 마이크로초, 나노초 단위를 지원합니다.
date_or_time_part
이week
(또는 그 변형)인 경우, 출력은 WEEK_START 세션 매개 변수에 의해 제어됩니다. 예를 포함한 자세한 내용은 달력상의 주 및 요일 섹션을 참조하십시오.차이를 계산하는 데 사용되는 단위(예:
month
)에 따라 DATE, TIME 또는 TIMESTAMP 필드에서 계산되는 부분이 결정됩니다. 따라서 단위에 따라 결과의 정밀도가 결정됩니다.더 작은 단위는 사용되지 않으므로 값은 반올림되지 않습니다. 예를 들어, 2021년 1월 1일과 2021년 2월 28일의 차이가 한 달보다 두 달에 더 가깝더라도 다음은 한 달을 반환합니다.
DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
DATE 값의 경우:
year
는 연도만 사용하고 다른 모든 부분은 무시합니다.month
는 월과 연도를 사용합니다.day
는 전체 날짜를 사용합니다.
TIME 값의 경우:
hour
는 시간만 사용하고 다른 모든 부분은 무시합니다.minute
는 시 및 분을 사용합니다.second
는 시, 분, 초를 사용하지만 소수 자리 초는 사용하지 않습니다.millisecond
는 시, 분, 초, 그리고 소수 자리 초의 처음 세 자리를 사용합니다. 소수 자리 초는 반올림되지 않습니다. 예를 들어,DATEDIFF(milliseconds, '2024-02-20 21:18:41.0000', '2024-02-20 21:18:42.1239')
는 1.124초가 아니라 1.123초를 반환합니다.microsecond
는 시, 분, 초, 그리고 소수 자리 초의 처음 여섯 자리를 사용합니다. 소수 자리 초는 반올림되지 않습니다.nanosecond
는 시, 분, 초, 그리고 소수 자리 초의 아홉 자리 모두를 사용합니다.
TIMESTAMP 값의 경우:
규칙은 위의 DATE 및 TIME 데이터 타입에 대한 규칙과 일치합니다. 지정된 단위와 더 큰 단위만 사용됩니다.
빼기 기호의 경우:
date_expr1
및date_expr2
는 둘 다 날짜여야 합니다. 시간과 타임스탬프는 허용되지 않습니다.
예¶
두 타임스탬프 간의 연도 차이를 계산합니다.
SELECT DATEDIFF(year,
'2020-04-09 14:39:20'::TIMESTAMP,
'2023-05-08 23:39:20'::TIMESTAMP)
AS diff_years;
+------------+
| DIFF_YEARS |
|------------|
| 3 |
+------------+
두 타임스탬프 간의 시간 차이를 계산합니다.
SELECT DATEDIFF(hour,
'2023-05-08T23:39:20.123-07:00'::TIMESTAMP,
DATEADD(year, 2, ('2023-05-08T23:39:20.123-07:00')::TIMESTAMP))
AS diff_hours;
+------------+
| DIFF_HOURS |
|------------|
| 17544 |
+------------+
날짜 부분이 DATEDIFF 계산에 어떤 영향을 미치는지 보여줍니다. 또한, 날짜 빼기에 빼기 기호를 사용하는 방법을 보여줍니다.
SELECT column1 date_1, column2 date_2,
DATEDIFF(year, column1, column2) diff_years,
DATEDIFF(month, column1, column2) diff_months,
DATEDIFF(day, column1, column2) diff_days,
column2::DATE - column1::DATE AS diff_days_via_minus
FROM VALUES
('2015-12-30', '2015-12-31'),
('2015-12-31', '2016-01-01'),
('2016-01-01', '2017-12-31'),
('2016-08-23', '2016-09-07');
+------------+------------+------------+-------------+-----------+---------------------+
| DATE_1 | DATE_2 | DIFF_YEARS | DIFF_MONTHS | DIFF_DAYS | DIFF_DAYS_VIA_MINUS |
|------------+------------+------------+-------------+-----------+---------------------|
| 2015-12-30 | 2015-12-31 | 0 | 0 | 1 | 1 |
| 2015-12-31 | 2016-01-01 | 1 | 1 | 1 | 1 |
| 2016-01-01 | 2017-12-31 | 1 | 23 | 730 | 730 |
| 2016-08-23 | 2016-09-07 | 0 | 1 | 15 | 15 |
+------------+------------+------------+-------------+-----------+---------------------+
시간 부분이 DATEDIFF 계산에 어떤 영향을 미치는지 보여줍니다.
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'DY, DD MON YYYY HH24:MI:SS';
SELECT column1 timestamp_1, column2 timestamp_2,
DATEDIFF(hour, column1, column2) diff_hours,
DATEDIFF(minute, column1, column2) diff_minutes,
DATEDIFF(second, column1, column2) diff_seconds
FROM VALUES
('2016-01-01 01:59:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP),
('2016-01-01 01:00:00'::TIMESTAMP, '2016-01-01 01:59:00'::TIMESTAMP),
('2016-01-01 01:00:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP);
+---------------------------+---------------------------+------------+--------------+--------------+
| TIMESTAMP_1 | TIMESTAMP_2 | DIFF_HOURS | DIFF_MINUTES | DIFF_SECONDS |
|---------------------------+---------------------------+------------+--------------+--------------|
| Fri, 01 Jan 2016 01:59:59 | Fri, 01 Jan 2016 02:00:00 | 1 | 1 | 1 |
| Fri, 01 Jan 2016 01:00:00 | Fri, 01 Jan 2016 01:59:00 | 0 | 59 | 3540 |
| Fri, 01 Jan 2016 01:00:59 | Fri, 01 Jan 2016 02:00:00 | 1 | 60 | 3541 |
+---------------------------+---------------------------+------------+--------------+--------------+
CURRENT_TIMESTAMP 함수와 DATEDIFF 함수를 함께 사용하면 지정된 타임스탬프와 현재 타임스탬프 사이의 차이를 년, 월, 일 단위로 계산할 수 있습니다.
SELECT column1 specified_timestamp,
column2 timestamp_now,
DATEDIFF(year, column1, column2) diff_years,
DATEDIFF(month, column1, column2) diff_months,
DATEDIFF(day, column1, column2) diff_days,
column2::DATE - column1::DATE AS diff_days_via_minus
FROM VALUES
('2012-08-23 09:00:00.000 -0700', CURRENT_TIMESTAMP);
+-------------------------------+-------------------------------+------------+-------------+-----------+---------------------+
| SPECIFIED_TIMESTAMP | TIMESTAMP_NOW | DIFF_YEARS | DIFF_MONTHS | DIFF_DAYS | DIFF_DAYS_VIA_MINUS |
|-------------------------------+-------------------------------+------------+-------------+-----------+---------------------|
| 2012-08-23 09:00:00.000 -0700 | 2024-09-04 17:21:12.189 -0700 | 12 | 145 | 4395 | 4395 |
+-------------------------------+-------------------------------+------------+-------------+-----------+---------------------+