In generale nei database relazionali l'ordine di valutazione non è definito, quindi è possibile che il select
le funzioni vengono chiamate prima di where
la clausola filtra i dati. So che questo è il caso in SQL Server. Qui è un post che suggerisce che lo stesso può accadere in Oracle.
Il case
l'istruzione, tuttavia, è a cascata, quindi viene valutata in ordine. Per questo motivo preferisco:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
Questo restituirà NULL
per valori che non sono numeri.