Si obtiene ese error de una cadena como 13.5
entonces los NLS_NUMERIC_CHARACTERS
de su sesión parece estar configurado para usar una coma como separador decimal:
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
Puede configurar explícitamente la sesión para que use un punto como separador decimal o proporcionar una máscara de formato que use un punto:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''), '99999999.99999'))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
O use el marcador de separador decimal en el modelo y anule la configuración NLS de la sesión:
select SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:alpha:]]', ''),
'99999999D99999', 'nls_numeric_characters=''.,'''))
from your_table;
SUM(TO_NUMBER(REGEXP_REPLACE(BIKOU,'[[:
---------------------------------------
35,5
La máscara obviamente tiene que ser adecuada para todos los valores que espera de su expresión regular; lo que he usado puede no ser del todo adecuado para sus datos.
Este tipo de problema es la razón por la que no debe almacenar números o fechas como cadenas. Utilice el tipo de datos correcto para sus columnas.