Obecně v relačních databázích není definováno pořadí hodnocení, takže je možné, že select funkce jsou volány před where klauzule filtruje data. Vím, že je to případ SQL Serveru. Zde je příspěvek, který naznačuje, že totéž se může stát v Oracle.
case příkaz však kaskáduje, takže je vyhodnocován v pořadí. Z toho důvodu preferuji:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
To vrátí NULL pro hodnoty, které nejsou čísly.