Pokud tuto chybu dostáváte z řetězce jako 13.5
pak NLS_NUMERIC_CHARACTERS
vaší relace Zdá se, že je nastaveno použití čárky jako oddělovač desetinných míst:
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
Můžete buď explicitně nastavit relaci tak, aby používala jako oddělovač desetinných míst tečku, nebo poskytnout masku formátu, která používá tečku:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Nebo použijte značku oddělovače desetinných míst v modelu a přepište nastavení NLS relace:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
'99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Maska samozřejmě musí být vhodná pro všechny hodnoty, které očekáváte od svého regulárního výrazu; to, co jsem použil, nemusí být zcela vhodné pro vaše data.
Tento druh problému je důvodem, proč byste neměli ukládat čísla nebo data jako řetězce. Použijte pro své sloupce správný datový typ.