- 카테고리:
TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC¶
TO_DECIMAL , TO_NUMBER , TO_NUMERIC 의 특수 버전으로, 동일 작업을 수행하지만(즉, 입력 식을 고정 소수점 숫자로 변환), 오류 처리를 지원합니다(즉, 변환을 수행할 수 없는 경우, 오류를 발생시키는 대신 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_expr
VARCHAR 형식의 식입니다.
선택 사항:
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으로 기본값이 지정됩니다.
사용법 노트¶
문자열 식에서만 작동합니다.
예¶
다음 예는 TRY_TO_DECIMAL
사용법을 보여줍니다.
이 첫 번째 예는 실패합니다. 마지막 열(“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, '$999.00') AS num, TO_DECIMAL(column1, '$999.00', 5, 2) AS num_with_scale, TO_DECIMAL(column1, 5, 2) AS num_with_format_err FROM VALUES ('$345.12');100038 (22018): Numeric value '$345.12' is not recognized다음 쿼리는 이전 쿼리와 동일하지만,
TO_DECIMAL
대신TRY_TO_DECIMAL
을 사용하므로 입력을 NULL로 변환합니다.SELECT column1 AS orig_string, TRY_TO_DECIMAL(column1, '$999.00') AS num, TRY_TO_DECIMAL(column1, '$999.00', 5, 2) AS num_with_scale, TRY_TO_DECIMAL(column1, 5, 2) AS num_with_format_err FROM VALUES ('$345.12'); +-------------+-----+----------------+---------------------+ | ORIG_STRING | NUM | NUM_WITH_SCALE | NUM_WITH_FORMAT_ERR | |-------------+-----+----------------+---------------------| | $345.12 | 345 | 345.12 | NULL | +-------------+-----+----------------+---------------------+