TRUNCATE , TRUNC

TRUNCATE , TRUNC

입력 표현식을 0에 가까운 가장 가까운(또는 같은) 값으로 내림(round down)해요. scale 파라미터로 지정한 값에 따라 변환은 다음을 제거할 수 있어요:

  • 소수점 뒤의 모든 자릿수, 정수 값을 만들어요. 이것은 숫자에서 TRUNC의 기본이자 가장 흔한 사용이에요.
  • 소수점 뒤의 일부 유효 자릿수, 덜 정밀한 값을 만들어요.
  • 소수점 뒤의 모든 유효 자릿수와 소수점 왼쪽의 일부 유효 자릿수, 10, 100 또는 다른 10의 거듭제곱의 배수인 값을 만들어요.

TRUNCATE와 TRUNC 함수는 동의어예요.

참고: TRUNC는 오버로드되어 있어요. 날짜/시간 값을 특정 부분으로 자르기 위해 함께 사용할 수도 있어요. 숫자형 TRUNC는 필수 파라미터 하나와 선택 파라미터 하나를 가져요. 날짜/시간형 TRUNC는 필수 파라미터 두 개를 가져요.

출처: Snowflake SQL Reference - TRUNCATE, 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 |
+----------+-------+-----------------+

더 알아보기 (Learn more)