2

私はVARCHAR2、基数と小数部分として書かれた数字の付いたを持ってい.02ます。使用する場合

TO_NUMBER(NUMBER_COLUMN)

エラーが発生します

ORA-01722:番号が無効です

フォーマットが認識されないことを示します。組み込みの回避策はありますか(必要なゼロを提供できますか、DECODEまたは提供できますか?SUBSTR

4

2 に答える 2

4

このエラーが発生しているのは、varchar列に基数+小数部分が存在するためではなく、varchar列に数値以外の文字が含まれているためです。これはto_numberの実行時に数値に変換できません。

このSQLフィドルを介してこれを示すことができます

また、NLSパラメータがOracleが小数点記号として期待するものと異なる可能性があるため、このエラーがスローされます。

パラメータを変更することにより、Oracleが10進演算子として期待する文字を変更NLS_NUMERIC_CHARACTERSできます。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"

.Oracleに小数点と,千単位の区切り文字としてを期待するように指示します

于 2012-07-12T12:52:31.190 に答える
3

試すOracleインスタンスはありませんが、TO_NUMBERのフルバージョンを使用すると役立つ場合があります:TO_NUMBER(column、 '9999999999D99')またはTO_NUMBER(column、'B9999999999D99')

詳細はこちらhttp://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

また、別の小数点を使用する必要がある場合は、TO_NUMBERに3番目のパラメーターを指定できます。たとえば、TO_NUMBER('$ 94 567,00'、'L999G999D00'、NLS_NUMERIC_CHARACTERS'、')。

于 2012-07-12T12:48:16.573 に答える