SQL Server: Función Split para dividir un string

En los lenguajes de programación es muy sencillo dividir un string de acuerdo a un carácter. Por ejemplo, en C# dividir un string de acuerdo al carácter “;” es tan sencillo como escribir “uno;dos”.Split(‘;’);. Pero, ¿qué pasa cuando tenemos que hacer ese mismo ejercicio en Transact-SQL o algún otro tipo de query que lo requiera? Para esos casos podemos utilizar la función a continuación. La misma requiere dos parámetros. El primero indica el string que se va a estar dividiendo y el segundo indica el carácter por el cual se va a dividir. El resultado que nos devuelve es de tipo tabla de una columna con los valores que han sido divididos. Veamos el código.

CREATE FUNCTION [dbo].[Split] (@String nvarchar (4000), @Delimitador nvarchar (10)) 
                returns @ValueTable table ([Value] nvarchar(4000))
begin
 declare @NextString nvarchar(4000)
 declare @Pos int
 declare @NextPos int
 declare @CommaCheck nvarchar(1)
 
 --Inicializa
 set @NextString = ''
 set @CommaCheck = right(@String,1) 
 
 set @String = @String + @Delimitador
 
 --Busca la posición del primer delimitador
 set @Pos = charindex(@Delimitador,@String)
 set @NextPos = 1
 
 --Itera mientras exista un delimitador en el string
 while (@pos <>  0)  
 begin
  set @NextString = substring(@String,1,@Pos - 1)
 
  insert into @ValueTable ( [Value]) Values (@NextString)
 
  set @String = substring(@String,@pos +1,len(@String))
  
  set @NextPos = @Pos
  set @pos  = charindex(@Delimitador,@String)
 end
 
 return
end

Un ejemplo de como utilizarla es:

SELECT Value 
FROM dbo.Split('Juan,Pedro,Julio,José', ',')

--Resultado
---------
--|Value|
--|-----|
--|Juan |
--|Pedro|
--|Julio|
--|José |
---------

-- También puede ser usado como subquery
SELECT *
FROM TABLA1
WHERE TABLA1.NOMBRE IN (SELECT Value FROM dbo.Split('Juan,Pedro,Julio,José', ','))

Espero que esta función les sirva.

Deja tu comentario