Oracle
 sql >> Database >  >> RDS >> Oracle

Come fare in modo che to_number ignori i valori non numerici

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.