sql >> Base de Datos >  >> RDS >> Oracle

conectar por cláusula en regex_substr

El "abuso" (como dijo 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 en la cadena que no contenga una coma.

Si intentará ejecutar:

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

obtendrás 23 .

y si intentará ejecutar:

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

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

Ahora vamos a ejecutar:

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

esta vez obtendremos 34 (segunda aparición) y usando 3 como último parámetro devolverá 45 y así sucesivamente.

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

devolverá:

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 vas a jugar con él - podría darle una visión más clara del tema.