Función “Split” en TSQL (Microsoft SQL)

Me encontre una función en TSQL que hace un “split” y le hice unas modificaciones para su posterior uso:

CREATE FUNCTION [dbo].[fn_split]
(
    @textInfo nvarchar(MAX),
    @delimiter NCHAR(1)
)
RETURNS @textRow TABLE (POSITION INT,  part nvarchar(MAX) )
AS
BEGIN
    IF @textInfo IS NULL RETURN
    DECLARE	@iStart INT,
    		@iPos INT,
			@iRow INT
 
	SET @iRow = 0
 
    IF SUBSTRING( @textInfo, 1, 1 ) = @delimiter 
    BEGIN
    	SET	@iStart = 2
    	INSERT INTO @textRow
    	VALUES( @iRow, NULL )
    END
    ELSE 
	BEGIN
    	SET	@iStart = 1
	END
 
    while 1=1
    BEGIN
		SET @iRow = @iRow + 1
    	SET	@iPos = charindex( @delimiter, @textInfo, @iStart )
 
		IF @iPos = 0
    		SET	@iPos = len( @textInfo )+1
 
    	IF @iPos - @iStart > 0			
    		INSERT INTO @textRow
    			VALUES	(@iRow, SUBSTRING( @textInfo, @iStart, @iPos-@iStart ))
    	ELSE
    		INSERT INTO @textRow
    			VALUES(@iRow, NULL )
    	SET	@iStart = @iPos+1
    	IF @iStart > len( @textInfo ) 
    		break
    END
    RETURN
 
END

La manera que la utiliza es:

DECLARE @mainTextRow TABLE (POSITION INT,  part nvarchar(MAX) )
 
INSERT INTO @mainTextRow 
		SELECT * FROM dbo.[fn_split](@fileTxt,'\n')
 
SELECT * FROM @textRow WHERE POSITION = 3

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *