По принцип в релационните бази данни редът на оценяване не е дефиниран, така че е възможно select
функциите се извикват преди where
клауза филтрира данните. Знам, че това е случаят в SQL Server. Тук е публикация, която предполага, че същото може да се случи в Oracle.
case
операторът обаче прави каскада, така че се оценява по ред. Поради тази причина предпочитам:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
Това ще върне NULL
за стойности, които не са числа.