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.
Pingback: Encuesta: ¿Qué sistema gestor de bases de datos preferís? « donnierock
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
Me respondo… quita del script el las tres etiquetas span que aparecen y asi si funciona.
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.
Gracias Eres los Máximo!!!