13.5
のような文字列からそのエラーが発生している場合 次に、セッションの NLS_NUMERIC_CHARACTERS
小数点としてコンマを使用するように設定されているようです:
alter session set nls_numeric_characters=',.';with your_table (bikou) as ( デュアル ユニオンから '10' を選択 すべて デュアル ユニオンから '12' を選択 デュアル ユニオンから '13.5' を選択 すべて から null を選択dual)select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', '')))from your_table;SQL エラー:ORA-01722:無効な番号
プレ>小数点としてピリオドを使用するようにセッションを明示的に設定するか、ピリオドを使用するフォーマット マスクを指定できます。
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999')) from your_table;SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:-)] -------------------------------------- 35,5コード> プレ>
または、モデルで小数点記号を使用して、セッションの NLS 設定をオーバーライドします:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999D99999', 'nls_numeric_characters=''.,''')) from your_table;SUM( TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:---------------------------------------------------- 35 ,5コード> プレ>
マスクは明らかに、正規表現から返されると予想されるすべての値に適している必要があります。私が使用したものは、あなたのデータにはあまり適していないかもしれません.
この種の問題が、数値や日付を文字列として格納してはならない理由です。列に正しいデータ型を使用してください。