Esiste una funzione isNumeric in PLSQL??

Potrebbe sorgere la necessità di dover leggere dei valori solo numerici, memorizzati su di un campo alfanumerico. I motivi per cui si può avere questa necessità possono essere svariati.

Al momento in cui scrivo, una funzione isNumeric o similare non esiste in PLSQL. Come possiamo realizzare questo? Ci viene in aiuto il sito di AskTom, che ci fornisce alcuni spunti.

 

Abbiamo due strade:

 

Funzione Translate….

La funzione Translate può risultare molto utile. Come indicato in questa pagina, la funzione esegue una sostituzione di caratteri basandosi su delle corrispondenze. Di conseguenza, un sistema per ottenere il risultato desiderato, si può usare la seguente istruzione:

replace( translate( <valore>, ‘0123456789’, ‘0000000000’ ), ‘0’, ” )

Spieghiamo il funzionamento: La translate, fondamentalmente, esegue una sostituzione delle cifre numeriche con ‘0’ (zero). La seconda funzione replace, banalmente, elimina lo ‘0’ (zero).

Conseguenza? Se <valore> contiene delle cifre numeriche, queste sono eliminate e viene restituita una stringa vuota. In alternativa, se su <valore> è presente un carattere alfanumerico, questo rimane e viene restituito nella stringa.

.

REGEX – Espressioni Regolari

E’ possibile anche utilizzare le espressioni regolari, per riuscire ad identificare i valori solo numerici. Se la versione di Oracle è la 10g o successive, la funzione REGEXP_LIKE può essere utilizzata. Di seguito un esempio:

 

SELECT col1 FROM t1 WHERE REGEXP_LIKE(col1, ‘[[:digit:]]’);

Basta semplicemente impostare le regole, ed il gioco è fatto.

Conclusioni

Si tratta di due soluzioni più che valide, ma la prima risulta essere molto semplice, veloce, pratica ed usabile in vari contesti. La seconda risulta più pesante.