domingo, 23 de febrero de 2014

Split en SQL (Convertir cadena en consulta)

Como podríamos separar en SQL una cadena con un formato especifico, la cual contiene varios datos separados por un delimitador? Bueno es fácil se realiza un split a la cadena.
 El problema es que SQL no tiene una función especifica para realizar esta acción, por lo que una solución seria implementar nuestra propia función Split. Lo que haremos es crear una función la cual reciba como parámetros una cadena y un delimitador tipo varchar,  y esta separara cada uno de los valores de la cadena  y los insertara como filas a una variable tipo tabla, desde la cual ya podemos utilizarlos como si fueran registros separados.

Veamos el código de esta función:

CREATE FUNCTION Split 
(
 @CADENA AS VARCHAR (MAX),
 @DELIMITER AS VARCHAR(10)
)
RETURNS @tt TABLE(item VARCHAR(255))
AS
BEGIN
 SET @CADENA+= @DELIMITER
 DECLARE @AUX AS VARCHAR(255)
 WHILE (LEN(@CADENA) > 0) 
 BEGIN
  SET @AUX= SUBSTRING(@CADENA, 1,CHARINDEX(@DELIMITER, @CADENA)-1)
  INSERT INTO @tt VALUES(@AUX)
  SET @CADENA= SUBSTRING(@CADENA,LEN(@AUX)+2,Len(@CADENA))
 END
 RETURN;
END

Ahora veamos un ejemplo supongamos que tenemos una cadena con nombres de personas separados por coma, entonces ejecutemos la función para ver su resultado.




Como podemos ver obtuvimos la tabla con todos los rows que teníamos en la cadena. Ahora podemos hacerlo con cualquier cadena inclusive con cualquier delimitador. Bueno me despido y espero que les sea de ayuda el código.