Secara umum dalam basis data relasional, urutan evaluasi tidak ditentukan, sehingga memungkinkan select fungsi dipanggil sebelum where klausa menyaring data. Saya tahu ini adalah kasus di SQL Server. Di sini adalah postingan yang menunjukkan bahwa hal yang sama dapat terjadi di Oracle.
case pernyataan, bagaimanapun, tidak kaskade, sehingga dievaluasi secara berurutan. Karena itu, saya lebih suka:
select (case when NOT regexp_like(xy,'[^[:digit:]]') then to_number(xy)
end)
from ABC;
Ini akan mengembalikan NULL untuk nilai yang bukan angka.