web-dev-qa-db-ja.com

Oracleでvarchar2列を数値に変換します

テーブルemp_detailsがあります。

emp_salaryはタイプvarchar2であり、特定の行はnullです。

emp_salary
100,34
null
20,2
30,3
null

列のタイプが数値である結果が必要です。

emp_salary
100.34
null
20.2
30.3
null

コードでの私の試みは:

select emp_salary 
from emp_details
where emp_salary = to_number(emp_salary ,'9999D99','nls_numeric_characters=,.');

エラー:

ORA-01722:番号が無効です
01722。 00000-"無効な番号"
*原因:指定された番号が無効でした。
*アクション:有効な数値を指定してください。

どうすれば修正できますか?

値を比較するつもりはありません。 varcharnumberに変更したいだけです。 TO_NUMBER を使用して、大きな関数の小さな部分で使用します。

2
user5505661

あなたはほとんどそこにいます。フィルターではなく選択した値の変換を実行しているように聞こえるので、NULLに対応する必要があります。

SELECT TO_NUMBER(NVL(emp_salary,'0'),'9999D99','nls_numeric_characters=,.')
FROM emp_details
4
BriteSponge