TRUNCATE , TRUNC
TRUNCATE , TRUNC
입력 표현식을 0에 가까운 가장 가까운(또는 같은) 값으로 내림(round down)해요. scale 파라미터로 지정한 값에 따라 변환은 다음을 제거할 수 있어요:
- 소수점 뒤의 모든 자릿수, 정수 값을 만들어요. 이것은 숫자에서 TRUNC의 기본이자 가장 흔한 사용이에요.
- 소수점 뒤의 일부 유효 자릿수, 덜 정밀한 값을 만들어요.
- 소수점 뒤의 모든 유효 자릿수와 소수점 왼쪽의 일부 유효 자릿수, 10, 100 또는 다른 10의 거듭제곱의 배수인 값을 만들어요.
TRUNCATE와 TRUNC 함수는 동의어예요.
참고: TRUNC는 오버로드되어 있어요. 날짜/시간 값을 특정 부분으로 자르기 위해 함께 사용할 수도 있어요. 숫자형 TRUNC는 필수 파라미터 하나와 선택 파라미터 하나를 가져요. 날짜/시간형 TRUNC는 필수 파라미터 두 개를 가져요.
본문
구문
TRUNCATE( input_expr [ , scale_expr ] )
TRUNC( input_expr [ , scale_expr ] )
인자
input_expr
연산 대상이 되는 값 또는 표현식이에요. 데이터 타입은 DECFLOAT, FLOAT, NUMBER 같은 숫자 데이터 타입 중 하나여야 해요.
scale_expr
소수점 뒤에 포함할 자릿수예요.
기본 scale_expr는 0이며, 함수가 소수점 뒤의 모든 자릿수를 제거한다는 뜻이에요.
음수 scale에 대한 정보는 아래 사용 시 유의사항을 참고하세요.
반환 값
- 입력이 NUMBER 값이면 반환 값의 데이터 타입은 NUMBER(precision, scale)이에요.
- 입력 scale이 0 이상이면 출력 scale은 일반적으로 입력 scale과 일치해요.
- 입력 scale이 음수였다면 출력 scale은 0이에요.
- 예를 들어:
TRUNCATE(3.14, 1)이 반환하는 데이터 타입은NUMBER(4, 1)이에요.TRUNCATE(3.14, 0)이 반환하는 데이터 타입은NUMBER(4, 0)이에요.TRUNCATE(33.33, -1)이 반환하는 데이터 타입은NUMBER(5, 0)이에요.
- scale이 0이면 값은 사실상 정수예요.
- 입력이 FLOAT 값이면 반환 값의 데이터 타입은 FLOAT이에요.
- 입력이 DECFLOAT 값이면 반환 값의 데이터 타입은 DECFLOAT이에요.
사용 시 유의사항
scale_expr이 음수이면 소수점 앞에서 숫자를 조정할 자릿수를 지정해요. 예를 들어 scale이 -2이면 결과는 100의 배수예요.scale_expr이 입력 표현식 scale보다 크면 함수는 아무 효과가 없어요.input_expr또는scale_expr중 하나라도 NULL이면 결과는 NULL이에요.- 절단은 더 작은 숫자 쪽이 아니라 0 쪽으로 수행돼요. 예를 들어
TRUNCATE(-9.6)은-10이 아니라-9가 돼요.
예시
다음 예시들은 숫자 값에 대한 TRUNC 함수를 보여줘요. 날짜, 시간, 타임스탬프 자르기의 예시는 날짜/시간 형태의 TRUNC를 참고하세요.
이 예시들은 이 샘플 테이블의 데이터를 사용해요. 이 테이블은 -975.975와 135.135라는 두 가지 서로 다른 십진수와, TRUNC 함수의 scale 파라미터로 사용할 다양한 값을 포함해요.
CREATE TABLE numeric_trunc_demo (n FLOAT, scale INTEGER);
INSERT INTO numeric_trunc_demo (n, scale) VALUES
(-975.975, -1), (-975.975, 0), (-975.975, 2),
( 135.135, -2), ( 135.135, 0), ( 135.135, 1),
( 135.135, 3), ( 135.135, 50), ( 135.135, NULL);
scale 파라미터를 지정하지 않으면 숫자 파라미터를 가진 TRUNC의 기본 동작은 파라미터와 같거나 0에 더 가까운 정수 값을 반환하는 것이에요. scale 파라미터를 0으로 지정해도 같은 일을 해요.
SELECT DISTINCT n, TRUNCATE(n)
FROM numeric_trunc_demo ORDER BY n;
+----------+-------------+
| N | TRUNCATE(N) |
|----------+-------------|
| -975.975 | -975 |
| 135.135 | 135 |
+----------+-------------+
다음 예시는 양수와 음수에 0, 양수, 음수 scale 파라미터를 적용해 TRUNC 함수를 호출한 결과를 보여줘요.
- 0 scale 파라미터를 지정하면 소수점 뒤의 모든 자릿수가 제거되어 정수 값이 돼요.
- 양수 scale 파라미터를 지정하면 소수점 뒤의 지정된 유효 자릿수를 남겨요.
- 음수 scale 파라미터를 지정하면 소수점 왼쪽의 해당 자릿수를 0으로 만들어요.
- +38보다 크거나 -38보다 작은 scale을 지정하는 것은 +38 또는 -38을 지정하는 것과 같아요.
SELECT n, scale, TRUNC(n, scale)
FROM numeric_trunc_demo ORDER BY n, scale;
+----------+-------+-----------------+
| N | SCALE | TRUNC(N, SCALE) |
|----------+-------+-----------------|
| -975.975 | -1 | -970 |
| -975.975 | 0 | -975 |
| -975.975 | 2 | -975.97 |
| 135.135 | -2 | 100 |
| 135.135 | 0 | 135 |
| 135.135 | 1 | 135.1 |
| 135.135 | 3 | 135.135 |
| 135.135 | 50 | 135.135 |
| 135.135 | NULL | NULL |
+----------+-------+-----------------+