martes, 23 de agosto de 2011

REGEXP_SUBSTR en oracle

Hola: (Hay problemas con las pipes)

Tengo tiempo trabajando con esta función de oracle REGEXP_SUBSTR y me gustaría compartir el uso que se le puede dar.

Supongamos que tenemos una cadena, el ejemplo mas claro es para los impuestos del SAT le llaman cadena original y se guarda con delimitadores su estándar es el pipe pero usaremos ";" para este ejemplo:

Cadena Original:

;; A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;Alvaro Obregón;37;3;Col. Roma Norte;México;Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;Monterrey;Nuevo Léon;México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;Monterrey;Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;

Supongamos que este dato lo guardamos en un campo de la base de datos y queremos extraer la razón social.

Usamos la siguiente expresión dentro de la consulta:

REGEXP_SUBSTR(campo de tipo varchar2 o tipos parecidos, expresión regular,
posición del campo en que va iniciar,numero de ocurrencia)

SELECT REGEXP_SUBSTR(';; A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;
Alvaro Obregón;37;3;Col. Roma Norte;México;Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;
Monterrey;Nuevo Léon;México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;Monterrey;
Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;','[^;]+',3,6) FROM DUAL

Ahora lo que quiere decir los parámetros es lo siguiente:


[^;]+ va a separar los tokens que contengan este expresión regular
3 va a empezar en la posición 3 de la cadena, va eliminar los dos primeros

la cadena quedaría de la siguiente manera:

A;1;2005-09-02T16:30:00;1;ISP900909Q88;Industrias del Sur Poniente, S.A. de C.V.;Alvaro Obregón;37;3;Col. Roma Norte;México;
Cuauhtémoc;Distrito Federal;México;06700;Pino Suarez;23;Centro;Monterrey;Monterrey;Nuevo Léon;
México;95460;CAUR390312S87;Rosa María Calderón Uriegas;Topochico;52;Jardines del Valle;Monterrey;
Monterrey;Nuevo León;México;95465;10;Caja;Vasos decorados;20;200;1;pieza;Charola metálica;150;150;IVA;52.5 ;;

El parámetro 6 que es la ocurrencia,para nuestra expresión separa la cadena de esta manera:

A ocurrencia 1
1 ocurrencia 2
2005-09-02T16:30:00 ocurrencia 3
1 ocurrencia 4
ISP900909Q88 ocurrencia 5
Industrias del Sur Poniente, S.A. de C.V. ocurrencia 6
Alvaro Obregón ocurrencia 7
.
.
n ocurrencia 7