数値文字列、浮動小数点型を NUMBER 型に変換

TO_NUMBER ( expr [, format [, nls_param]] )
return [ number ]
- フォーマット書式に従って変換された NUMBER 型

フォーマット文字列
各国語サポートパラメータ
| nls_param の種類 | 設定例 |
| NLS_NUMERIC_CHARACTERS | NLS 関連パラメータ 参照 |
| NLS_CURRENCY |
| NLS_ISO_CURRENCY |
| NLS_DUAL_CURRENCY |
TO_NUMBER 関数の内容
数値文字列式、または、浮動小数点(BINARY_FLOAT、BINARY_DOUBLE)の expr を フォーマット文字列 format 書式にしたがって NUMBER 型に変換する。
書式の指定方法により、符号の位置や有無、通貨文字を含んだ文字列などを数値に変換する。
⇒ (数値の詳しい書式へ...)
TO_NUMBER 使用例
SQL> select str, fmt, TO_NUMBER(str, fmt) from to_number_sample;
STR FMT TO_NUMBER(STR,FMT)
-------------------- -------------------- ------------------
1 9 1
-1 9 -1
-1 9 -1
+1 S9 1
1,234.5 9,999.9 1234.5
12345.6 00000D0 12345.6
エラーになる使用例 ORA-01722: 数値が無効です。
TO_NUMBER(' 1', 'S9') ⇒ 符号指定があるのに空白
TO_NUMBER('1,234.5', '9,999') ⇒ フォーマット定義より精度が小さい
TO_NUMBER('1,234.5', '999.9') ⇒ オーバーフローする
以上のように TO_CHAR 関数 と異なり桁あふれの場合はもちろん丸め処理が発生する数値文字列の場合でもエラーになる。
各国語サポートパラメータを使用した例
SQL> select to_number('-123円','999L','NLS_CURRENCY = ''円''') yen from dual;
YEN
----------
-123
数値型の優先順位
数値型の優先順位
BINARY_DOUBLE と NUMBER を計算すると NUMBER 型の値を優先順位の高い BINARY_DOUBLE 型に変換したのちに計算される。
| 数値の優先順位 | 数値のデータ型 |
| 1 | BINARY_DOUBLE |
| 2 | BINARY_FLOAT |
| 3 | NUMBER |
SQL 関数 - TO_NUMBER 関連