例
最後の列(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 |
+-------------+------+
X形式要素を指定し、 に TO_DECIMAL または TRY_TO_DECIMAL 関数を使用して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 をご参照ください。