sql >> データベース >  >> RDS >> Oracle

SUM(TO_NUMBER(varchar2 フィールド)) を実行できません:ORA 01722 [ORACLE]

    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  

    マスクは明らかに、正規表現から返されると予想されるすべての値に適している必要があります。私が使用したものは、あなたのデータにはあまり適していないかもしれません.

    この種の問題が、数値や日付を文字列として格納してはならない理由です。列に正しいデータ型を使用してください。




    1. ストアドプロシージャで特権を見つけるためのOracleクエリ

    2. MySQLの多対多の関係

    3. パスワードが指定されていない場合にMySQLルートログインを無効にするにはどうすればよいですか?

    4. MySQLSelect年と月の最初の日