- 카테고리:
TO_DECIMAL , TO_NUMBER , TO_NUMERIC¶
입력 식을 고정 소수점 숫자로 변환합니다. NULL 입력의 경우, 출력은 NULL입니다.
이러한 함수는 동의어입니다.
구문¶
TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
인자¶
필수:
expr
숫자, 문자 또는 베리언트 형식의 식입니다.
선택 사항:
format
입력
expr
및 반환을 구문 분석하는 데 사용되는 SQL 형식 모델입니다. 자세한 내용은 SQL 형식 모델 섹션을 참조하십시오.precision
결과 숫자의 최대 10진수로, 1에서 38까지입니다. Snowflake에서, 정밀도는 숫자 저장에 필요한 바이트 수를 결정하는 데 사용되지 않으며 효율성에 영향을 미치지 않으므로 기본값은 최댓값(38)입니다.
scale
소수점 이하 자릿수(0에서
precision
- 1까지)입니다. 0은 소수점 이하 자릿수가 없음을 나타냅니다(즉, 정수). 기본 스케일은 0입니다.
반환¶
함수는 NUMBER(p,s)
를 반환합니다. 여기서 p는 precision
이고 s는 scale
입니다.
precision
가 지정되지 않은 경우, 38로 기본값이 지정됩니다.
scale
이 지정되지 않은 경우, 0으로 기본값이 지정됩니다.
사용법 노트¶
NULL 입력의 경우, 결과는 NULL입니다.
스케일이 다른 고정 소수점 숫자는 오른쪽에 0을 추가하거나(스케일을 늘릴 때) 반올림으로 소수 자릿수를 줄여 변환됩니다. 스케일을 늘리는, 고정에서 고정으로의 캐스팅은 실패할 수 있습니다.
부동 소수점 숫자는 스케일이 주어진 표현 가능 범위 내에 있는 경우, 변환됩니다. 2진수와 10진수 소수 간의 변환은 정확하지 않습니다. 정밀도 손실 또는 범위를 벗어남 오류가 발생할 수 있습니다. 무한대이거나 숫자가 아닌 경우, 변환 오류가 발생합니다.
문자열은 10진 정수 또는 소수로 변환됩니다.
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
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 |
+---------+-----+-----------+-----------+