MS SQL Server: Split/Explode für SQL

Aufgabenstellung

Eine Spalte einer Tabelle beinhaltet eine Auflistung, die durch ein Zeichen getrennt ist. Im Beispiel die Spalte Gruppe.

Nr|Gruppe
-------------------------------
1 | Buerste,Besen,Feger
2 | Eier,Salz,Butter
3 | Bier,Schnaps,Wein 

Es soll nun mit einer Art Split/Explode wie in PHP die Spalte aufgesplittet werden und einzelne Werte ausgegeben werden

Ansatz

Der folgende Code erstellt eine Funktion, die für eine Datenbank gilt. Kopiert man diesen Code in das SQL Server Management Studio und führt ihn mit F5 aus, erhält die ausgewählte Datenbank die Funktion Split.

Lösung

CREATE FUNCTION [dbo].[split](@String varchar(8000), @Delimiter varchar(12), 
                                                 @returnItem int)
RETURNS varchar(8000)
AS
BEGIN
	DECLARE @id int
	DECLARE @idx int
	DECLARE @slice varchar(8000)
	DECLARE @returnslice varchar(8000)

	SET @id = 0
	SET @idx = 1
	SET @returnslice = null
	
	WHILE @idx!= 0
	BEGIN
		SET @id = @id + '1'
		SET @idx = charindex(@Delimiter,@String)

		IF @idx!=0
			SET @slice = left(@String,@idx - 1)
		ELSE
			SET @slice = @String

		IF @id = @returnItem SET @returnslice = @slice
		SET @String = SUBSTRING(right(@String,len(@String) - @idx),
                                                  len(@Delimiter), len(@String))

		IF len(@String) = 0 BREAK
	END
	RETURN @returnslice
END

Aufruf mit:

SELECT dbo.split('DIES/IST/EIN/TEST','/',2)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.