Classi di caratteri Oracle Builtin String
Domanda
L'Oracle avere costanti di classe di caratteri della stringa built-in (cifre, lettere, alphanum, superiore, inferiore, ecc)?
Il mio vero obiettivo è quello di tornare in modo efficiente solo le cifre [0-9] da una stringa esistente.
Purtroppo, usiamo ancora Oracle 9, quindi le espressioni regolari non sono un'opzione qui.
Esempi Il campo dovrebbe contenere da zero a tre lettere, 3 o 4 cifre, poi zero a due lettere. Voglio estrarre le cifre.
String --> Result
ABC1234YY --> 1234
D456YD --> 456
455PN --> 455
Soluzione
Non ci sono costanti stringa, ma si può fare:
select translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
)
from mytable;
Ad esempio:
select translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
)
from
( select 'fdkhsd1237ehjsdf7623A@L:P' as mystring from dual);
TRANSLAT
--------
12377623
Se si vuole fare questo, spesso si può avvolgere in su in funzione:
create function only_digits (mystring varchar2) return varchar2
is
begin
return
translate
( mystring
, '0'||translate (mystring, 'x0123456789', 'x')
, '0'
);
end;
/
Quindi:
SQL> select only_digits ('fdkhsd1237ehjsdf7623A@L:P') from dual;
ONLY_DIGITS('FDKHSD1237EHJSDF7623A@L:P')
-----------------------------------------------------------------
12377623
Altri suggerimenti
È possibile controllare la lista per i tipi di dati predefiniti su Oracle qui , ma non siete andando a trovare quello che stai cercando.
Per estrarre i numeri di una stringa è possibile utilizzare una combinazione di queste funzioni:
- TO_NUMBER , a convertire una stringa in numero.
- REPLACE , a rimuovere le occorrenze.
- TRADURRE , a convertire i caratteri.
Se si fornisce un esempio più conciso sarà più facile dare una soluzione dettagliata.
Se si è in grado di utilizzare PL / SQL qui, un altro approccio è scrivere la propria funzione espressione regolare matcher. Un punto di partenza è elegante, molto piccola matcher espressione regolare di Rob Pike nel capitolo 1 del Bella codice . Uno degli esercizi per il lettore è quello di aggiungere classi di personaggi. (Faresti prima bisogno di tradurre le sue 30 linee di codice C in PL / SQL.)