Top > SQL 関数一覧 (T‐Z) > TO_BINARY_DOUBLE、TO_BINARY_FLOAT

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

syntax

TO_BINARY_DOUBLE ( expr [, format [, nls_param]] ) どちらも Oracle 10g
TO_BINARY_FLOAT ( expr [, format [, nls_param]] )
return [ BINARY_DOUBLE | BINARY_FLOAT ]

parameter

expr数値文字列式、数値式
formatフォーマット文字列 (数値文字列式を使用したとき)
nls_param各国語サポートパラメータ

return

  • フォーマット書式に従って変換された浮動小数点型

avail

  • SQL および PL/SQL の両方で使用可能。

フォーマット文字列

各国語サポートパラメータ
通貨データに対して浮動小数点型を使用することは稀だと思うが使用できる。

nls_param の種類設定例
NLS_NUMERIC_CHARACTERSNLS 関連パラメータ 参照
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 型に変換したのちに計算される。

数値の優先順位数値のデータ型
1BINARY_DOUBLE
2BINARY_FLOAT
3NUMBER

関連 SQL 関数

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)