TRUNCATE, TRUNC
TRUNCATE, TRUNC
DATE, TIME 또는 TIMESTAMP 값을 지정된 정밀도로 절사(truncate)하는 날짜·시간 함수예요. 예를 들어 타임스탬프를 분기로 내리면 그 타임스탬프 분기의 첫째 날 자정에 해당하는 타임스탬프를 반환해요.
출처: 공식 문서
본문
DATE, TIME 또는 TIMESTAMP 값을 지정된 정밀도로 절사합니다. 예를 들어 타임스탬프를 분기로 내리면 원래 타임스탬프 분기의 첫째 날 자정에 해당하는 타임스탬프를 반환합니다.
이 함수는 두 인자의 순서를 바꿔 DATE_TRUNC에 대한 대체 구문을 제공합니다.
TRUNCATE와 TRUNC 함수는 동의어입니다.
절사는 추출(extraction)과 같지 않습니다. 예를 들어:
- 이 함수로 타임스탬프를 분기로 내리면 입력 타임스탬프의 해당 분기 첫째 날 자정에 해당하는 타임스탬프를 반환합니다.
- EXTRACT 함수로 타임스탬프에서 분기 날짜 부분을 추출하면 타임스탬프의 연도 기준 분기 번호를 반환합니다.
참고 TRUNC는 오버로드되어 있습니다. 유효 숫자 줄이기를 위해, 예를 들어 십진 값을 정수로 절사하는 데 숫자 값과 함께 사용할 수도 있습니다. 숫자 TRUNC는 필수 매개변수 하나와 선택 매개변수 하나를 가집니다. 날짜/시간 TRUNC는 필수 매개변수 두 개를 가집니다.
대안 (Alternatives): DATE_TRUNC
참고 (See also): DATE_PART , EXTRACT
구문 (Syntax)
TRUNC( <date_or_time_expr>, <date_or_time_part> )
인자 (Arguments)
date_or_time_expr
이 인자는 날짜, 시간 또는 타임스탬프로 평가되어야 합니다.
date_or_time_part
이 인자는 "지원되는 날짜·시간 부분(Supported date and time parts)"에 나열된 값 중 하나여야 합니다.
반환값 (Returns)
반환값은 입력 값과 같은 타입입니다.
예를 들어 입력 값이 TIMESTAMP이면 반환값도 TIMESTAMP입니다.
사용 참고 (Usage notes)
date_or_time_part가week(또는 그 변형)일 때 출력은 WEEK_START 세션 매개변수에 의해 제어됩니다. 자세한 내용과 예제는 Calendar weeks and weekdays를 참고하세요.- TIME 값의 경우 TIME 타입의 범위 밖에 있는
date_or_time_part를 지정할 수 없습니다. 예를 들어 TIMESTAMP 값을day,week,year등으로 절사할 수는 있는데, TIMESTAMP 타입이 필요한 정밀도로 날짜/시간을 인코딩하기 때문입니다. 그러나 TIME 값을day,week,year등으로 절사하려고 하면 오류가 발생합니다.
예제 (Examples)
다음 예제들은 날짜/시간 값에 대한 TRUNC 또는 TRUNCATE 함수를 보여줍니다. 숫자 값 절사 예제는 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;
+------------+----------+-------------------------+
| MYDATE | MYTIME | MYTIMESTAMP |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+
다음 예제들은 날짜 절사를 보여줍니다. 모든 경우에서 반환값은 입력 값과 같은 데이터 타입이지만, 잘려진 부분(분수 초 등)에 대해서는 0입니다.
DATE 값을 연, 월, 일로 내립니다:
SELECT mydate AS "DATE",
TRUNC(mydate, 'year') AS "TRUNCATED TO YEAR",
TRUNC(mydate, 'month') AS "TRUNCATED TO MONTH",
TRUNC(mydate, 'day') AS "TRUNCATED TO DAY"
FROM test_date_trunc;
+------------+-------------------+--------------------+------------------+
| DATE | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2024-05-09 | 2024-01-01 | 2024-05-01 | 2024-05-09 |
+------------+-------------------+--------------------+------------------+
TIME 값을 분으로 내립니다:
SELECT mytime AS "TIME",
TRUNCATE(mytime, 'minute') AS "TRUNCATED TO MINUTE"
FROM test_date_trunc;
+----------+---------------------+
| TIME | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00 |
+----------+---------------------+
TIMESTAMP 값을 시, 분, 초로 내립니다:
SELECT mytimestamp AS "TIMESTAMP",
TRUNCATE(mytimestamp, 'hour') AS "TRUNCATED TO HOUR",
TRUNCATE(mytimestamp, 'minute') AS "TRUNCATED TO MINUTE",
TRUNCATE(mytimestamp, 'second') AS "TRUNCATED TO SECOND"
FROM test_date_trunc;
+-------------------------+-------------------------+-------------------------+-------------------------+
| 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 |
+-------------------------+-------------------------+-------------------------+-------------------------+
TRUNC 함수와 EXTRACT 함수를 대조합니다:
SELECT TRUNC(mytimestamp, 'quarter') AS "TRUNCATED",
EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
FROM test_date_trunc;
+-------------------------+-----------+
| TRUNCATED | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 | 2 |
+-------------------------+-----------+
더 알아보기 (Learn more)
- DATE_TRUNC — 같은 기능의 다른 구문
- EXTRACT — 날짜 부분 추출
- TRUNC (숫자) — 숫자 값 절사