카테고리:

날짜 및 시간 함수

DATEDIFF

요청된 날짜 또는 시간 부분을 기반으로 두 날짜, 시간 또는 타임스탬프 식 간의 차이를 계산합니다. 함수는 세 번째 인자에서 두 번째 인자를 뺀 결과를 반환합니다.

빼기 기호(-)를 사용하여 한 날짜에서 다른 날짜를 빼서 두 날짜 사이의 차이를 계산할 수도 있습니다.

날짜, 시간 또는 타임스탬프에 시간 단위를 더하거나(예: 날짜에 2일을 더함) 시간 단위를 빼려면 DATEADD, TIMEADD 또는 TIMESTAMPADD 함수를 사용하면 됩니다.

참고 항목:

TIMEDIFF , TIMESTAMPDIFF

구문

DATEDIFF의 경우:

DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )
Copy

빼기 기호의 경우:

<date_expr2> - <date_expr1>
Copy

인자

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_expr2date_or_time_expr1 사이의 차이를 단위 수(초, 일 등)로 나타내는 정수를 반환합니다.

인자가 NULL인 경우 NULL을 반환합니다.

빼기 기호의 경우:

date_expr2date_expr1 간의 일수 차이를 나타내는 정수를 반환합니다. (단위는 항상 일입니다.)

date_expr2 또는 date_expr1 이 NULL인 경우 오류를 반환합니다.

사용법 노트

DATEDIFF 및 빼기 기호 둘 다의 경우:

  • 출력 값은 음수일 수 있습니다(예: -12일).

DATEDIFF의 경우:

  • 이 함수는 연도, 분기, 월, 주, 일, 시간, 분, 초, 밀리초, 마이크로초, 나노초 단위를 지원합니다.

  • date_or_time_partweek (또는 그 변형)인 경우, 출력은 WEEK_START 세션 매개 변수에 의해 제어됩니다. 예를 포함한 자세한 내용은 달력상의 주 및 요일 섹션을 참조하십시오.

  • 차이를 계산하는 데 사용되는 단위(예: month)에 따라 DATE, TIME 또는 TIMESTAMP 필드에서 계산되는 부분이 결정됩니다. 따라서 단위에 따라 결과의 정밀도가 결정됩니다.

    더 작은 단위는 사용되지 않으므로 값은 반올림되지 않습니다. 예를 들어, 2021년 1월 1일과 2021년 2월 28일의 차이가 한 달보다 두 달에 더 가깝더라도 다음은 한 달을 반환합니다.

    DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
    
    Copy

    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_expr1date_expr2 는 둘 다 날짜여야 합니다. 시간과 타임스탬프는 허용되지 않습니다.

두 타임스탬프 간의 연도 차이를 계산합니다.

SELECT DATEDIFF(year, 
                '2020-04-09 14:39:20'::TIMESTAMP, 
                '2023-05-08 23:39:20'::TIMESTAMP) 
  AS diff_years;
Copy
+------------+
| 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;
Copy
+------------+
| 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');
Copy
+------------+------------+------------+-------------+-----------+---------------------+
| 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';
Copy
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);
Copy
+---------------------------+---------------------------+------------+--------------+--------------+
| 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);
Copy
+-------------------------------+-------------------------------+------------+-------------+-----------+---------------------+
| 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 |
+-------------------------------+-------------------------------+------------+-------------+-----------+---------------------+