Em geral em bancos de dados relacionais, a ordem de avaliação não é definida, então é possível que o
select
funções são chamadas antes do where
cláusula filtra os dados. Eu sei que este é o caso no SQL Server. Aqui é um post que sugere que o mesmo pode acontecer no Oracle. O
case
A instrução, no entanto, está em cascata, portanto, é avaliada em ordem. Por isso prefiro:select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
Isso retornará
NULL
para valores que não são números.