- 카테고리:
TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC¶
:doc:`/sql-reference/functions/to_decimal`의 특수 버전으로, 입력 표현식을 고정 소수점 숫자로 변환하는 동일 작업을 수행하지만, 변환을 수행할 수 없는 경우 함수가 NULL을 반환하도록 하는 오류 처리 지원이 있습니다.
이러한 함수는 동의어입니다.
자세한 내용은 오류 처리 변환 함수 섹션을 참조하십시오.
구문¶
TRY_TO_DECIMAL( <string_expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TRY_TO_NUMBER( <string_expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TRY_TO_NUMERIC( <string_expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
인자¶
필수:
string_exprVARCHAR 형식의 식입니다.
선택 사항:
format입력
expr및 반환을 구문 분석하는 데 사용되는 SQL 형식 모델입니다. 자세한 내용은 SQL 형식 모델 섹션을 참조하십시오.precision결과 숫자의 최대 10진수로, 1에서 38까지입니다. Snowflake에서 정밀도는 숫자 저장에 필요한 바이트 수를 결정하는 데 사용되지 않으며 효율성에 영향을 미치지 않으므로 기본값은 최대값(38)입니다.
scale소수점 이하 자릿수(0에서
precision- 1까지)입니다. 0은 소수점 이하 자릿수가 없음을 나타냅니다(즉, 정수). 기본 스케일은 0입니다.
반환¶
함수는 다음 기본값을 사용하여 NUMBER 형식의 값을 반환합니다.
변환을 수행할 수 없거나 입력이 NULL인 경우 NULL을 반환합니다.
사용법 노트¶
입력은 문자열 식이어야 합니다.
예¶
다음 예는 마지막 열(dec_with_range_error)이 보유하도록 요청받은 값을 보유하기에 충분한 유효 자릿수를 저장하지 않기 때문에 실패합니다.
SELECT column1 AS orig_string,
TO_DECIMAL(column1) AS dec,
TO_DECIMAL(column1, 10, 2) AS dec_with_scale,
TO_DECIMAL(column1, 4, 2) AS dec_with_range_err
FROM VALUES ('345.123');
100039 (22003): Numeric value '345.123' is out of range
다음 쿼리는 이전 쿼리와 동일하지만, TO_DECIMAL 대신 TRY_TO_DECIMAL을 사용하므로 범위를 벗어난 값을 NULL로 변환합니다.
SELECT column1 AS orig_string,
TRY_TO_DECIMAL(column1) AS dec,
TRY_TO_DECIMAL(column1, 10, 2) AS dec_with_scale,
TRY_TO_DECIMAL(column1, 4, 2) AS dec_with_range_err
FROM VALUES ('345.123');
+-------------+-----+----------------+--------------------+
| ORIG_STRING | DEC | DEC_WITH_SCALE | DEC_WITH_RANGE_ERR |
|-------------+-----+----------------+--------------------|
| 345.123 | 345 | 345.12 | NULL |
+-------------+-----+----------------+--------------------+
다음 예는 입력 문자열에 달러 기호($) 및 쉼표를 사용하여 자릿수와 소수점이 아닌 자릿수 그룹을 구분합니다. 그러나 마지막 열의 형식 지정자는 TO_DECIMAL 함수가 달러 기호와 쉼표를 예상하도록 지시하지 않습니다.
SELECT column1 AS orig_string,
TO_DECIMAL(column1, '$9,999.00') AS num,
TO_DECIMAL(column1, '$9,999.00', 6, 2) AS num_with_scale,
TO_DECIMAL(column1, 6, 2) AS num_with_format_err
FROM VALUES ('$7,543.21');
100038 (22018): Numeric value '$7,543.21' is not recognized
다음 쿼리는 이전 쿼리와 동일하지만, TO_DECIMAL 대신 TRY_TO_DECIMAL을 사용하므로 입력을 NULL로 변환합니다.
SELECT column1 AS orig_string,
TRY_TO_DECIMAL(column1, '$9,999.00') AS num,
TRY_TO_DECIMAL(column1, '$9,999.00', 6, 2) AS num_with_scale,
TRY_TO_DECIMAL(column1, 6, 2) AS num_with_format_err
FROM VALUES ('$7,543.21');
+-------------+------+----------------+---------------------+
| ORIG_STRING | NUM | NUM_WITH_SCALE | NUM_WITH_FORMAT_ERR |
|-------------+------+----------------+---------------------|
| $7,543.21 | 7543 | 7543.21 | NULL |
+-------------+------+----------------+---------------------+
다음 예는 입력 표현식에 숫자가 아닌 문자가 포함되어 있으므로 실패합니다.
SELECT column1 AS orig_string,
TO_DECIMAL(column1) AS num
FROM VALUES ('aaa');
100038 (22018): Numeric value 'aaa' is not recognized
다음 쿼리는 이전 쿼리와 동일하지만, TO_DECIMAL 대신 TRY_TO_DECIMAL을 사용하므로 입력을 NULL로 변환합니다.
SELECT column1 AS orig_string,
TRY_TO_DECIMAL(column1) AS num
FROM VALUES ('aaa');
+-------------+------+
| ORIG_STRING | NUM |
|-------------+------|
| aaa | NULL |
+-------------+------+
TO_DECIMAL 또는 TRY_TO_DECIMAL 함수를 사용하여 :ref:`X 형식 요소<label-fixed-position-numeric-formats>`를 지정하면 16진수 값을 10진수 값으로 변환할 수 있습니다.
SELECT column1 AS orig_string,
TO_DECIMAL(column1, 'XXX') AS to_decimal_num,
TRY_TO_DECIMAL(column1, 'XXX') AS try_to_decimal_num
FROM VALUES ('aaa');
+-------------+----------------+--------------------+
| ORIG_STRING | TO_DECIMAL_NUM | TRY_TO_DECIMAL_NUM |
|-------------+----------------+--------------------|
| aaa | 2730 | 2730 |
+-------------+----------------+--------------------+
추가적인 예를 보려면 TO_DECIMAL , TO_NUMBER , TO_NUMERIC 섹션을 참조하십시오.