Split de cadenas cortas en SQL Server‏

Buscando si existe alguna función en SQL Server parecida al Split de Java para parsear cadenas sin tener que montar un procedimiento con charindex y substrings para separar las cadenas, al final he dado con la función PARSENAME, que no sirve exactamente para hacer split de cadenas en sí, pero para cadenas cortas funciona bien y sobretodo es rápido y directo.
Realmente, esta función sirve para parsear el nombre cualificado de un objeto de base de datos. Es decir, para parsear cadenas del tipo servidor.basedatos.dbo.objeto donde, mediante el segundo parámetro se especifica qué parte se quiere separar:

  • 1 = Nombre del objeto
  • 2 = Nombre del esquema
  • 3 = Nombre de la base de datos
  • 4 = Nombre del servidor

Este funcionamiento se puede aprovechar para separar o hacer split de cadenas de hasta 4 elementos, reemplazando antes el separador utilizado en la cadena por el punto (.) para simular la estructura de un nombre cualificado de un objeto y que PARSENAME haga el resto.

Ejemplo de PARSENAME en SQL Server

SELECT PARSENAME(REPLACE('Hola#Pepe#García', '#', '.'), 3) --return Hola
SELECT PARSENAME(REPLACE('Hola#Pepe#García', '#', '.'), 2) --return Pepe
SELECT PARSENAME(REPLACE('Hola#Pepe#García', '#', '.'), 1) --return García

Primero se hace un REPLACE para reemplazar el separador (almohadilla en este caso) por el punto (.). De esta forma quedaría Hola.Pepe.García. Con este separador, ya se puede llamar a PARSENAME para que haga el split de la posición que se le indique. ¡Atención a que la posición va de atrás a adelante! Es decir, la primera posición en este caso sería el 3, la segunda el 2 y la última el 3.
Para splits sencillos viene muy bien, aunque sólo sirve con hasta 4 elementos. Si se le pasa como segundo parámetro un número mayor de 4, devuelve siempre null. De la misma manera, si se le pasa una posición que no tenga valor, también de vuelve null. Por ejemplo, en el caso que se ha puesto como ejemplo, si se le pasa un 4 como segundo parámetro, devuelve null porque no hay ningún elemento en esa posición.

Deja un comentario

Pin It on Pinterest