Generalnie w relacyjnych bazach danych kolejność oceny nie jest zdefiniowana, więc możliwe jest, że select
funkcje są wywoływane przed where
klauzula filtruje dane. Wiem, że tak jest w przypadku SQL Server. Tutaj to post, który sugeruje, że to samo może się zdarzyć w Oracle.
case
oświadczenie jednak działa kaskadowo, więc jest oceniane w kolejności. Z tego powodu wolę:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
To zwróci NULL
dla wartości, które nie są liczbami.