Der angegebene SQL-Code erstellt eine benutzerdefinierte Funktion namens getSplitString
. Diese Funktion dient dazu, einen eingegebenen String basierend auf einem angegebenen Trennzeichen (z.B. ein Komma oder ein Semikolon) zu teilen und die resultierenden Teile als separate Zeilen in einer Tabelle zurückzugeben.
CREATE FUNCTION [dbo].[getSplitString] (
@Input NVARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS @Output TABLE (
Item NVARCHAR(1000)
)
AS
BEGIN
DECLARE @StartIndex INT = 1, @EndIndex INT
WHILE CHARINDEX(@Delimiter, @Input, @StartIndex) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Delimiter, @Input, @StartIndex)
INSERT INTO @Output (Item)
SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - @StartIndex)
SET @StartIndex = @EndIndex + 1
END
IF @StartIndex <= LEN(@Input)
BEGIN
INSERT INTO @Output (Item)
SELECT SUBSTRING(@Input, @StartIndex, LEN(@Input) - @StartIndex + 1)
END
RETURN
END
GO
Sie nutzt eine WHILE-Schleife, um durch den Eingabestring zu iterieren und Teile des Strings in eine Ausgabetabelle zu fügen, basierend auf dem angegebenen Trennzeichen (@Delimiter
). Die Funktion ist so konzipiert, dass sie den letzten Teilstring hinzufügt, selbst wenn dieser kein abschließendes Trennzeichen hat.
Hier ist eine Schritt-für-Schritt-Erklärung, wie die Funktion arbeitet:
- Initialisierung: Zwei lokale Variablen
@StartIndex
und@EndIndex
werden deklariert.@StartIndex
wird mit 1 initialisiert, was die Zeichenposition am Anfang des Eingabestrings markiert. - Beginn der WHILE-Schleife: Die Funktion tritt in eine WHILE-Schleife ein, die solange läuft, bis es keine Instanz des Trennzeichens (
@Delimiter
) im Teil des Strings gibt, der nach@StartIndex
beginnt. - Suche nach dem Trennzeichen: Mit
CHARINDEX
wird die Position des nächsten Trennzeichens im Eingabestring ab@StartIndex
gesucht und@EndIndex
zugewiesen. - Extrahierung und Einfügung des Teilstrings: Der Teilstring zwischen
@StartIndex
und dem Zeichen vor@EndIndex
wird extrahiert und in die Ausgabetabelle eingefügt. - Aktualisierung von
@StartIndex
:@StartIndex
wird aktualisiert, um auf das Zeichen direkt nach dem gefundenen Trennzeichen zu zeigen, indem man@EndIndex + 1
zuweist. - Behandlung des letzten Teilstrings: Nachdem die Schleife beendet ist, prüft die IF-Bedingung, ob
@StartIndex
kleiner oder gleich der Gesamtlänge des Eingabestrings ist. Ist das der Fall, bedeutet dies, dass es einen letzten Teilstring gibt, der nach dem letzten Trennzeichen kommt. Dieser letzte Teilstring wird dann ebenfalls in die Ausgabetabelle eingefügt. - Rückgabe: Die Funktion gibt die gefüllte Ausgabetabelle zurück, die alle Teilstrings enthält, die durch das angegebene Trennzeichen getrennt sind.
Beispiel zur Verwendung:
Angenommen, Sie möchten den String „A,B,C,D“ anhand des Kommas teilen. Sie könnten die Funktion wie folgt aufrufen:
SELECT * FROM dbo.getSplitString('A,B,C,D', ',')
Das Ergebnis wäre eine Tabelle mit den Werten:
Item
----
A
B
C
D
Diese Funktion ist nützlich, wenn Sie Strings teilen müssen, die durch ein bestimmtes Trennzeichen getrennt sind, und Sie die Teile in tabellarischer Form zurückgeben möchten.
Be the first to comment