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.