TO_NUMBERとは、文字列を数値に変換するOracle SQL関数です。正負の符号や小数点、桁区切りのカンマ、通貨記号などが含まれた文字列も数値に変換することができます。
DBMS | TO_NUMBER |
---|---|
MySQL | ✗ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✗ |
文字列を数値に変換する。
TO_NUMBER(expr)
文字列の書式モデルを指定して、文字列を数値に変換する。
TO_NUMBER(expr, format)
NLSパラメータを指定して、文字列を数値に変換する。
TO_NUMBER(expr, format, nls_param)
数値に変換する文字列を指定する。文字列の中に小数点や正負の符号が含まれていても良い。
文字列の中に桁区切りのカンマや通貨記号などが含まれていると、「ORA-01722: 数値が無効です。」のエラーが発生する。 桁区切りのカンマや通貨記号などが含まれている文字列を数値に変換する場合は、 formatで文字列の書式モデルを指定する。
文字列の書式モデルを指定する。書式モデルのうち、次表に示す文字は特別な意味を持つ。
文字 | 説明 |
---|---|
0 | 1桁の数字で先行ゼロ |
1 | 1桁の数字 |
D | 小数点の記号(NLS_NUMERIC_CHARACTERパラメータによって決まる)を表す。 日本やアメリカなどではピリオドとなり、ドイツやフランスではカンマとなる。 |
G | 桁区切りの記号(NLS_NUMERIC_CHARACTERパラメータによって決まる)を表す。 日本やアメリカなどではカンマとなり、ドイツやフランスではピリオドとなる。 |
S | 正の符号又は負の符号を表す。 |
各言語サポートパラメータを指定する。
文字列を数値に変換するSQLの例を示す。
SQL> select TO_NUMBER('12') from DUAL;
TO_NUMBER('12')
---------------
12
SQL> select TO_NUMBER('-34') from DUAL;
TO_NUMBER('-34')
----------------
-34
SQL>
書式を指定して文字列を数値に変換するSQLの例を示す。
SQL> select TO_NUMBER('123,456') from DUAL;
SELECT TO_NUMBER('123,456') from DUAL;
*
行1でエラーが発生しました。 :
ORA-01722: 数値が無効です。
SQL> select TO_NUMBER('123,456', '999G999') from DUAL;
TO_NUMBER('123,456','999G999')
------------------------------
123456
SQL> select TO_NUMBER('123,456', '999,999') from DUAL;
TO_NUMBER('123,456','999,999')
------------------------------
123456
SQL>
小数点を含む文字列は、書式を指定しなくても数値に変換できる。
SQL> SELECT TO_NUMBER('56.78') FROM DUAL;
TO_NUMBER('56.78')
------------------
56.78
SQL>
TO_NUMBERは文字列を数値に変換する関数であるが、逆に数値を文字列に変換するにはTO_CHAR関数を使う。
日付を文字列に変換するには、TO_CHAR関数を使う。