En general en las bases de datos relacionales no se define el orden de evaluación, por lo que es posible que el select
las funciones se llaman antes del where
cláusula filtra los datos. Sé que este es el caso en SQL Server. Aquí es una publicación que sugiere que lo mismo puede suceder en Oracle.
El case
Sin embargo, la declaración se produce en cascada, por lo que se evalúa en orden. Por esa razón, prefiero:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
Esto devolverá NULL
para valores que no son números.