- カテゴリ:
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
1から38までの、結果の数値の10進数の最大数です。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 | +-------------+-----+----------------+---------------------+