Función Split a Tabla SQL Server
Muchas personas que han solicitado esta función que había publicado hace unos meses atrás (bueno unos dos años), por lo que le hice unos cambios y la vuelvo a publicar, espero que les sirva de algo.
RETURNS @Results table (word varchar(50))
AS
BEGIN
DECLARE @INDEX INT
DECLARE @SLICE varchar(200)
-- Asignar 1 a la variable que utilizaremos en el loop para no iniciar en 0.
SELECT @INDEX = 1
WHILE @INDEX !=0
BEGIN
-- Obtenemos el índice de la primera ocurrencia del split de caracteres.
SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
-- Ahora ponemos todo a la izquierda de el slice de la variable.
IF @INDEX != 0
SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
ELSE
SELECT @SLICE = @STRING
insert into @Results(word) values(@SLICE)
SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
-- Salimos del loop si terminamos la búsqueda
IF LEN(@STRING) = 0 BREAK
END
RETURN
END
Pueden probarla ejecutandola de la siguiente manera:
SELECT * FROM dbo.split('miguel, manuel, maría, minerva',',')
Referencia a: Enlace
Espero les sirva,
Comentarios
Estoy probando tu ejemplo, gracias por ponerlo y estoy haciendo una adaptación. Te cuento. Hago lo siguiente:
DECLARE @word VARCHAR(50)
DECLARE @i_PaisRealizacion CHAR(100)
SELECT @i_PaisRealizacion = '51,5,6'
DECLARE PaisRealiza CURSOR FOR
SELECT * FROM split(@i_PaisRealizacion,',')
OPEN PaisRealiza
FETCH NEXT FROM PaisRealiza
INTO @word
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Nombre: ' + @word
FETCH NEXT FROM PaisRealiza
INTO @word
END
CLOSE PaisRealiza
DEALLOCATE PaisRealiza
GO
El caso es que si hago esto me saca un solo print, del número 51,pero si en vez de la variable @i_PaisRealizacion pongo directamente la cadena '51,4...' si me los saca, y el caso es que no se por que
Gracias