post icon

SQL Split String

Spesso mi è capitato di dover effettuare uno split di una stringa in sql.
Dato che non esiste una funzione di sistema per effettuare lo split bisogna creare una User Defined Function che restituisce una tabella con gli elementi risultanti dallo split.

La UDF in SQL per lo split di una stringa è definita di seguito:

USE [Northwind]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') 
    AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SplitString]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE FUNCTION [dbo].[SplitString](@StringToSplit nvarchar (4000), @Separ nvarchar (10))

RETURNS @ValueTable TABLE ([Elem] nvarchar(4000))
BEGIN
	DECLARE @NextString nvarchar(4000)
	DECLARE @Pos int
	DECLARE @NextPos int
	DECLARE @CommaCheck nvarchar(1)

	--Inizialize
	SET @NextString = ''
	SET @CommaCheck = right(@StringToSplit,1)
	SET @StringToSplit = @StringToSplit + @Separ

	--Get the position of the first @Separ
	SET @Pos = CHARINDEX(@Separ,@StringToSplit)
	SET @NextPos = 1

	--Loop while there is still a comma in the String of levels
	WHILE (@pos <>  0)  
	BEGIN
		SET @NextString = RTRIM(LTRIM(SUBSTRING(@StringToSplit,1,@Pos - 1)))

		IF(@NextString <> '')
			BEGIN
				INSERT INTO @ValueTable ([Elem]) Values (@NextString)
			END

		SET @StringToSplit = SUBSTRING(@StringToSplit,@pos +1,len(@StringToSplit))

		SET @NextPos = @Pos
		SET @pos  = CHARINDEX(@Separ,@StringToSplit)
	END

	RETURN
END
GO

SELECT * from [dbo].[SplitString]('Test;split;string;', ';')

Il risultato della select in coda allo script è il seguente:

Download source split_string_sql.zip (736,00 bytes)

24 febbraio 2009 @ 13:44

No comments yet.

Leave a comment

Leave a Reply

Are you human? Time limit is exhausted. Please reload CAPTCHA.