카테고리:

변환 함수

TO_DECIMAL , TO_NUMBER , TO_NUMERIC

입력 식을 고정 소수점 숫자로 변환합니다. NULL 입력의 경우, 출력은 NULL입니다.

이러한 함수는 동의어입니다.

참고 항목:

TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC

구문

TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Copy

인자

필수:

expr

숫자, 문자 또는 베리언트 형식의 식입니다.

선택 사항:

format

입력 expr 및 반환을 구문 분석하는 데 사용되는 SQL 형식 모델입니다. 자세한 내용은 SQL 형식 모델 섹션을 참조하십시오.

precision

결과 숫자의 최대 10진수로, 1에서 38까지입니다. Snowflake에서, 정밀도는 숫자 저장에 필요한 바이트 수를 결정하는 데 사용되지 않으며 효율성에 영향을 미치지 않으므로 기본값은 최댓값(38)입니다.

scale

소수점 이하 자릿수(0에서 precision - 1까지)입니다. 0은 소수점 이하 자릿수가 없음을 나타냅니다(즉, 정수). 기본 스케일은 0입니다.

반환

이 함수는 NUMBER(precision, scale) 을 반환합니다.

  • precision 가 지정되지 않은 경우, 38로 기본값이 지정됩니다.

  • scale 이 지정되지 않은 경우, 0으로 기본값이 지정됩니다.

사용법 노트

  • NULL 입력의 경우, 결과는 NULL입니다.

  • 고정 소수점 숫자의 경우:

    • 소수 자릿수가 다른 숫자는 오른쪽에 0을 추가하거나(소수 자릿수를 늘려야 하는 경우) 반올림으로 소수 자릿수를 줄이는(소수 자릿수를 줄여야 하는 경우) 방식으로 변환됩니다.

    • 고정 소수점 숫자를 소수 자릿수를 늘리는 고정 소수점 숫자로 강제 변환하는 작업이 실패할 수 있습니다.

  • 부동 소수점 숫자의 경우:

    • 숫자가 주어진 소수 자릿수로 표현 가능한 범위 내에 있으면 변환됩니다.

    • 이진 소수와 십진 소수 사이의 변환은 정확하지 않습니다. 이로 인해 정밀도가 떨어지거나 범위 이탈 오류가 발생할 수 있습니다.

    • 무한대 값과 NaN(숫자가 아님) 값인 경우 변환 오류가 발생합니다.

  • 문자열은 십진수, 정수, 분수 또는 부동 소수점 숫자로 변환됩니다.

    • 분수 입력의 경우 전체 자릿수는 소수점 뒤의 자릿수로 추론됩니다.

    • 부동 소수점 입력의 경우 가수 또는 지수는 생략할 수 있으며 0으로 해석됩니다. 따라서 E 는 0으로 구문 분석됩니다.

  • VARIANT 입력의 경우:

    • 베리언트에 고정 소수점 또는 부동 소수점 숫자 값이 포함된 경우, 적절한 숫자 변환이 수행됩니다.

    • 베리언트에 문자열이 포함된 경우, 문자열 변환이 수행됩니다.

    • 베리언트에 부울 값이 포함된 경우, 결과는 0 또는 1입니다(false 및 true에 각각 해당).

    • 베리언트에 JSON null 값이 포함된 경우, 출력은 NULL입니다.

create or replace table number_conv(expr varchar);
insert into number_conv values ('12.3456'), ('98.76546');

select expr, to_number(expr),  to_number(expr, 10, 1), to_number(expr, 10, 8) from number_conv;

+----------+-----------------+------------------------+------------------------+
| EXPR     | TO_NUMBER(EXPR) | TO_NUMBER(EXPR, 10, 1) | TO_NUMBER(EXPR, 10, 8) |
|----------+-----------------+------------------------+------------------------|
| 12.3456  |              12 |                   12.3 |            12.34560000 |
| 98.76546 |              99 |                   98.8 |            98.76546000 |
+----------+-----------------+------------------------+------------------------+

select expr, to_number(expr, 10, 9) from number_conv;

100039 (22003): Numeric value '12.3456' is out of range
Copy
select column1,
       to_decimal(column1, '99.9') as D0,
       to_decimal(column1, '99.9', 9, 5) as D5,
       to_decimal(column1, 'TM9', 9, 5) as TD5
from values ('1.0'), ('-12.3'), ('0.0'), ('  - 0.1   ');

+---------+-----+-----------+-----------+
| COLUMN1 |  D0 |        D5 |       TD5 |
|---------+-----+-----------+-----------|
| 1.0     |   1 |   1.00000 |   1.00000 |
| -12.3   | -12 | -12.30000 | -12.30000 |
| 0.0     |   0 |   0.00000 |   0.00000 |
| - 0.1   |   0 |  -0.10000 |  -0.10000 |
+---------+-----+-----------+-----------+
Copy