JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
数値文字列、数値型を浮動小数点型に変換
TO_BINARY_DOUBLE ( expr [, format [, nls_param ]] )
TO_BINARY_DOUBLE ( expr [DEFAULT ret_val ON CONVERSION ERROR ] ↵
[ , format[, nls_param]] )
return [ BINARY_DOUBLE ]
TO_BINARY_FLOAT ( expr [, format [, nls_param ]] )
TO_BINARY_FLOAT ( expr [ DEFAULT ret_val ON CONVERSION ERROR ] ↵
[ , format[, nls_param]] )
return [ BINARY_FLOAT ]
フォーマット文字列
各国語サポートパラメータ
通貨データに対して浮動小数点型を使用することは稀だと思うが使用できる。
nls_param の種類設定例 NLS_NUMERIC_CHARACTERS NLS 関連パラメータ 参照NLS_CURRENCY NLS_ISO_CURRENCY NLS_DUAL_CURRENCY
TO_BINARY_DOUBLE 関数の内容
数値文字列 expr を書式 format を使って倍精度浮動小数点型に変換する。浮動小数点型には NUMBER 型には存在しない 非数値をあらわす 'NAN' 無限大をあらわす '+INF' と '-INF' を使用することができる。
または、他の数値型の数値式 expr を 「明示的」 に倍精度浮動小数点型 に変換する。⇔ 暗黙変換
書式の指定方法により、符号の位置や有無、通貨文字を含んだ数値文字列などを BINARY_DOUBLE に変換する。
⇒ (数値の詳しい書式へ...)
TO_BINARY_FLOAT 関数の内容
関数の内容は TO_BINARY_DOUBLE と同じで変換する型が 単精度浮動小数点型 BINARY_FLOAT になる。
⇒ BINARY_DOUBLE と BINARY_FLOAT の最小値と最大値
TO_BINARY_DOUBLE 使用例
SQL> select str, fmt, TO_BINARY_DOUBLE (str, fmt) d,
2 TO_BINARY_FLOAT (str, fmt) f
3 from to_binary_double_sample;
STR FMT D F
-------------------- -------------------- ---------------------- ----------------------
1 9 1.00000000000000E+00 1.00000000000000E+00
-1 9 -1.00000000000000E+00 -1.00000000000000E+00
-1 9 -1.00000000000000E+00 -1.00000000000000E+00
+1 S9 1.00000000000000E+00 1.00000000000000E+00
1,234.5 9,999.9 1.23450000000000E+03 1.23450000000000E+03
12345.6 00000D0 1.23456000000000E+04 1.23455996000000E+04
1.79769313486231E+30 9.99999999999999EEEE 1.79769313486231E+30 1.79769309000000E+30
エラーになる使用例 (TO_NUMBER と同じ) ORA-01722: 数値が無効です。
SQL> select TO_BINARY_DOUBLE (' 1' , 'S9' ) from dual ;
select TO_BINARY_DOUBLE (' 1' , 'S9' ) from dual
*
行1でエラーが発生しました。:
ORA-01722: 数値が無効です。
TO_BINARY_DOUBLE(' 1', 'S9') ⇒ 符号指定があるのに空白
TO_BINARY_DOUBLE('1,234.5', '9,999') ⇒ フォーマット定義より精度が小さい
TO_BINARY_DOUBLE('1,234.5', '999.9') ⇒ オーバーフローする
以上のように TO_CHAR 関数 と異なり桁あふれの場合はもちろん丸め処理が発生する数値文字列の場合でもエラーになる。
各国語サポートパラメータを使用した例
グループセパレータをドット(.)、小数点をカンマ(,)、通貨文字を'円' に設定
SQL> select TO_BINARY_DOUBLE ('-1.234,99円' ,'9G999D99L' ,
2 'NLS_NUMERIC_CHARACTERS=' ',.' ' NLS_CURRENCY = ' '円' '' ) yen
3 from dual ;
YEN
--------------
-1.234990E+03
豆知識
数値型の優先順位
BINARY_DOUBLE と BINARY_FLOAT を計算すると BINARY_FLOAT 型の値を優先順位の高い BINARY_DOUBLE 型に変換したのちに計算される。
数値の優先順位 数値のデータ型 1 BINARY_DOUBLE 2 BINARY_FLOAT 3 NUMBER
関連 SQL 関数