Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie można SUM(TO_NUMBER(pole varchar2)) :ORA 01722 [ORACLE]

Jeśli otrzymujesz ten błąd z ciągu, takiego jak 13.5 następnie NLS_NUMERIC_CHARACTERS sesji wydaje się, że używa przecinka jako separatora dziesiętnego:

alter session set nls_numeric_characters=',.';

with your_table (bikou) as (
  select '10' from dual
  union all select '12' from dual
  union all select '13.5' from dual
  union all select null from dual
)
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', '')))
from your_table;

SQL Error: ORA-01722: invalid number

Możesz albo jawnie ustawić sesję, aby używała kropki jako separatora dziesiętnego, albo podać maskę formatu, która używa kropki:

select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;

SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
                                   35,5

Lub użyj znacznika separatora dziesiętnego w modelu i zastąp ustawienie NLS sesji:

select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
  '99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;

SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
                                   35,5

Maska oczywiście musi być odpowiednia dla wszystkich wartości, których oczekujesz od swojego wyrażenia regularnego; to, czego użyłem, może nie pasować do Twoich danych.

Ten rodzaj problemu powoduje, że nie powinieneś przechowywać liczb ani dat jako ciągów. Użyj prawidłowego typu danych dla swoich kolumn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zaleta używania wyzwalacza do wypełniania klucza zastępczego w Oracle plsql

  2. używanie EXECUTE IMMEDIATE z wieloma tymi samymi argumentami bind

  3. Zestaw testowy konfiguracji AOL/J

  4. Ogranicz limit czasu połączenia dla bazy danych Oracle

  5. Błąd Oracle SQL:ORA-00923:Nie znaleziono słowa kluczowego From w oczekiwanym miejscu