- 카테고리:
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(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
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 |
+---------+-----+-----------+-----------+