Als je die fout krijgt van een tekenreeks zoals 13.5
dan is uw sessie NLS_NUMERIC_CHARACTERS
lijkt te zijn ingesteld om een komma als decimaal scheidingsteken te gebruiken:
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
U kunt de sessie expliciet instellen om een punt als decimaalteken te gebruiken, of u kunt een opmaakmasker opgeven dat een punt gebruikt:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Of gebruik de decimaaltekenmarkering in het model en overschrijf de NLS-instelling van de sessie:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
'99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
Het masker moet uiteraard geschikt zijn voor alle waarden die je terug verwacht van je regex; wat ik heb gebruikt, is misschien niet helemaal geschikt voor je gegevens.
Dit soort problemen is de reden waarom u getallen of datums niet als strings moet opslaan. Gebruik het juiste gegevenstype voor uw kolommen.