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
È stato utile?

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:

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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top