Implementar la función Split en Transact-SQL

Prácticamente todos los lenguajes de programación que tienen un tipo de datos string tienen una función split. Dicha función recibe como parámetro una cadena o un caracter con el separador que queremos usar y corta la cadena sobre la que lo aplicamos por ese caracter, devolviendo generalmente un array de cadenas. Es decir, si tenemos una cadena «hola, soy, Manolito» y aplicamos un split que recibe como parámetro la coma («,») obtendríamos un array que tendría en su posición cero «hola», en su posición uno «soy» y en su posición dos «Manolito».

El caso es que en T-SQL no existe esta función, una soberana putada porque muchas veces nos va a hacer falta. Imaginad que desde un programa le tenéis que pasar un array de enteros para una comprobación ¿cómo lo hacéis? Pasáis el array a una cadena y lo metéis como parámetro, ok. Pero en ese caso lo que tenéis como parámetro no es una array de enteros, sino una cadena con enteros, y para determinadas comparaciones puede fallar. Pero tranquilos, implementar la función split no es difícil.

CREATE FUNCTION Split(@Cadena varchar(150), @Limite char(1))
RETURNS @Resultado table (word varchar(50))
AS
BEGIN
  DECLARE @Indice INT
  DECLARE @AUXILIAR varchar(200)
  SELECT @Indice = 1

  WHILE @Indice !=0
  BEGIN
    SELECT @Indice = CHARINDEX(@Limite,@Cadena)
      IF @Indice != 0
        SELECT @AUXILIAR = LEFT(@Cadena,@Indice - 1)
      ELSE
        SELECT @AUXILIAR = @Cadena

      insert into @Resultado(word) values(@AUXILIAR)

      SELECT @Cadena = RIGHT(@Cadena,LEN(@Cadena) - @Indice)
      IF LEN(@Cadena) = 0 BREAK
  END

RETURN
END

Si copiáis y pegáis debería funcionar a la perfección (sólo la he testeado en SQL-Server pero debería tirar en MySQL, PostgreSQL y, en general, en todos los SGBD que tiren de T-SQL). Edito para comentar que obviamente esto devuelve una tabla, no un array ni un string.

5 comentarios en “Implementar la función Split en Transact-SQL

  1. Pingback: Encuesta: ¿Qué sistema gestor de bases de datos preferís? « donnierock

  2. fajprieto

    Estoy con Sql Server 2008 R2 y al pegar el script en una nueva consulta y ejecutarlo me marca sintaxis incorrecta en ‘<' precisamente en la linea
    DECLARE @Indice INT

      1. Gracias por avisar. Cuando escribí eso desconocía el uso de la etiqueta «sourcecode» en wordpress, por lo que tabulaba los ejemplos de código a mano. Al reconvertirla debió quedarse eso por medio.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.