Saltar al contenido

conectar por cláusula en regex_substr

Solución:

El “abuso” (como lo expresó Colin ‘t Hart) de connected by tiene un buen propósito aquí: usando REGEXP_SUBSTR puede extraer solo una de las 4 coincidencias (23,34,45,56): la expresión regular [^,]+ coincide con cualquier secuencia de caracteres de la cadena que no contenga una coma.

Si intenta ejecutar:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

obtendrás 23.

y si intentas ejecutar:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

también obtendrás 23 solo que ahora también ponemos dos parámetros adicionales: comience a buscar en la posición 1 (que es la predeterminada) y devuelva la primera aparición.

Ahora ejecutemos:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

esta vez tendremos 34 (Segunda aparición) y usando 3 como volverá el último parámetro 45 etcétera.

El uso de recursivo connected by junto con level se asegura de que recibirá todos los resultados relevantes (¡aunque no necesariamente en el orden original!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

volverá:

TOKEN
23
34
45
56

que no solo contiene los 4 resultados, sino que también los divide en filas separadas en el conjunto de resultados.

Si tu violín con él, podría darle una visión más clara del tema.

connect by no tiene nada que ver con regex_substr:

  • La primera es realizar una consulta jerárquica, consulte http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm

  • El segundo es obtener una subcadena usando expresiones regulares.

Esta consulta “abusa” del connect by funcionalidad para generar filas en una consulta en dual. Mientras la expresión pasara a connect by es cierto, generará una nueva fila y aumentará el valor de la pseudocolumna LEVEL.

Luego LEVEL se pasa a regex_substr para obtener el enésimo valor al aplicar la expresión regular.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *