PostgreSQL: Separar una cadena con expresión regular y poner los resultados en filas

Introducción

Este es otro ejercicio de codewars que estuve a punto de resolver correctamente, aunque al final utilicé unos métodos no recomendados para el ejercicio, pero funcionaron.

El problema era el siguiente:

Dada una cadena aleatoria, partirla en diferentes filas cada que se encontrara cualquier vocal. Por ejemplo, veamos esta cadena:

ah7ki3eumgpa72mdpwe8od

Si la partimos o hacemos un split en cada vocal, sin incluir las vocales, tendríamos un resultado así:

h7k
3
mgp
72mdpw
8
d

Pues exactamente eso se tenía que hacer usando una consulta.

Paso 1: Separar usando expresión regular

En el mismo ejercicio nos aconsejan, aunque no es obligatorio, usar expresiones regulares. En PostgreSQL existe una función que, con un valor y una expresión regular devuelve un arreglo en donde cada valor corresponde a la porción separada: REGEX_SPLIT_TO_ARRAY

La forma de usarla fue la siguiente:

SELECT REGEXP_SPLIT_TO_ARRAY(cadena_aleatoria) AS resultados FROM tabla;

Y devolvía algo así (un arreglo):

{h7k,3,mgp,72mdpw,8,d}

Pero esas no eran filas, eran una sola fila con un arreglo. Entonces busqué la forma de convertir ese arreglo en filas.

Por cierto, la expresión regular es [aeiou], lo que significa que coincidirá cada que encuentre cualquier valor de los que están en el conjunto.

Paso 2: convertir arreglo en filas

Para ello utilicé la función UNNEST, que expande los elementos de un arreglo a filas. Por lo que si el arreglo era {h7k,3,mgp,72mdpw,8,d}, al llamar a esta función se convertía en:

h7k
3
mgp
72mdpw
8
d

La consulta quedó así al final:

SELECT UNNEST(REGEXP_SPLIT_TO_ARRAY(cadena_aleatoria, '[aeiou]')) 
AS resultados 
FROM tabla;

Solución con buenas prácticas

Después de haber mandado esa solución que ya he expuesto, vi la que implementaba las mejores prácticas. Y era casi una combinación de ambas funciones: REGEXP_SPLIT_TO_TABLE

Como su nombre lo dice, separa en filas de acuerdo a una expresión regular.

Conclusión

Siempre se aprenden cosas nuevas, y qué mejor que en codewars, en donde miles de expertos y no tan expertos califican y comparten las soluciones de las pruebas.

Por cierto, el ejercicio o kata es este.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario