Oracle
 sql >> база данни >  >> RDS >> Oracle

Не може да се СУМИ(TO_NUMBER(поле varchar2)) :ORA 01722 [ORACLE]

Ако получавате тази грешка от низ като 13.5 след това NLS_NUMERIC_CHARACTERS на вашата сесия изглежда е настроен да използва запетая като десетичен разделител:

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

Можете или изрично да настроите сесията да използва точка като десетичен разделител, или да предоставите маска за формат, която използва точка:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perl DBI - стартирайте SQL скрипт с множество изрази

  2. грешен номер или типове аргументи при извикване на P_AA

  3. ORA-06553:PLS-801:вътрешна грешка [55018] при тестване на функция, връщаща ROWTYPE

  4. Защо DECODE на Oracle ми дава различна стойност от NVL?

  5. Oracle SQL - Съединява Синтаксис/Ключови думи