Ако получавате тази грешка от низ като 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
Маската очевидно трябва да е подходяща за всички стойности, които очаквате обратно от вашия регулярен израз; това, което използвах, може да не е съвсем подходящо за вашите данни.
Този вид проблем е причината да не съхранявате числа или дати като низове. Използвайте правилния тип данни за вашите колони.