카테고리:

날짜 및 시간 함수

DATE_TRUNC

DATE, TIME 또는 TIMESTAMP 값을 지정한 전체 자릿수로 자릅니다. 예를 들어, 타임스탬프를 분기로 자르는 경우, 원래 타임스탬프 분기의 첫 번째 날 자정에 해당하는 타임스탬프가 반환됩니다.

이 함수는 두 인자를 반대로 하여 TRUNC 에 대한 대체 구문을 제공합니다.

잘림은 추출과 동일하지 않습니다. 예:

  • 이 함수를 사용하여 타임스탬프를 분기로 자르는 경우, 입력 타임스탬프에 대한 분기의 첫 번째 날 자정에 해당하는 타임스탬프가 반환됩니다.

  • EXTRACT 함수를 사용하여 타임스탬프에서 분기 날짜 부분을 추출하는 경우, 타임스탬프에서 해당 연도의 분기 번호가 반환됩니다.

대체:

TRUNC

참고 항목:

DATE_PART , EXTRACT

구문

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Copy

인자

date_or_time_part

이 인자는 지원되는 날짜 및 시간 부분 에 나열된 값 중 하나여야 합니다.

date_or_time_expr

이 인자는 날짜, 시간 또는 타임스탬프로 평가되어야 합니다.

반환

반환된 값은 입력 값과 동일한 형식입니다.

예를 들어, 입력 값이 TIMESTAMP 인 경우, 반환된 값은 TIMESTAMP 입니다.

사용법 노트

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

DATE_TRUNC 함수 예제에서는 다음 테이블의 데이터를 사용합니다.

CREATE OR REPLACE TABLE test_date_trunc (
 mydate DATE,
 mytime TIME,
 mytimestamp TIMESTAMP);

INSERT INTO test_date_trunc VALUES (
  '2024-05-09',
  '08:50:48',
  '2024-05-09 08:50:57.891 -0700');

SELECT * FROM test_date_trunc;
Copy
+------------+----------+-------------------------+
| MYDATE     | MYTIME   | MYTIMESTAMP             |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+

다음 예에서는 날짜 잘림을 보여줍니다. 모든 경우에 반환되는 값은 입력 값과 동일한 데이터 타입이지만, 잘린 부분(예: 소수 자리 초)에는 0이 포함됩니다.

날짜를 연도, 월, 일로 자릅니다.

SELECT mydate AS "DATE",
       DATE_TRUNC('year', mydate) AS "TRUNCATED TO YEAR",
       DATE_TRUNC('month', mydate) AS "TRUNCATED TO MONTH",
       DATE_TRUNC('week', mydate) AS "TRUNCATED TO WEEK",
       DATE_TRUNC('day', mydate) AS "TRUNCATED TO DAY"
  FROM test_date_trunc;
Copy
+------------+-------------------+--------------------+-------------------+------------------+
| DATE       | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO WEEK | TRUNCATED TO DAY |
|------------+-------------------+--------------------+-------------------+------------------|
| 2024-05-09 | 2024-01-01        | 2024-05-01         | 2024-05-06        | 2024-05-09       |
+------------+-------------------+--------------------+-------------------+------------------+

시간을 분으로 자릅니다.

SELECT mytime AS "TIME",
       DATE_TRUNC('minute', mytime) AS "TRUNCATED TO MINUTE"
  FROM test_date_trunc;
Copy
+----------+---------------------+
| TIME     | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00            |
+----------+---------------------+

TIMESTAMP 를 시, 분, 초로 자릅니다.

SELECT mytimestamp AS "TIMESTAMP",
       DATE_TRUNC('hour', mytimestamp) AS "TRUNCATED TO HOUR",
       DATE_TRUNC('minute', mytimestamp) AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('second', mytimestamp) AS "TRUNCATED TO SECOND"
  FROM test_date_trunc;
Copy
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP               | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2024-05-09 08:50:57.891 | 2024-05-09 08:00:00.000 | 2024-05-09 08:50:00.000 | 2024-05-09 08:50:57.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+

DATE_TRUNC 함수와 EXTRACT 함수를 대조합니다.

SELECT DATE_TRUNC('quarter', mytimestamp) AS "TRUNCATED",
       EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
  FROM test_date_trunc;
Copy
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 |         2 |
+-------------------------+-----------+