Wie teile ich einen String durch ein begrenztes Zeichen in SQL Server?
In diesem Artikel werden verschiedene Möglichkeiten zum Aufteilen des durch Trennzeichen getrennten Zeichenfolgenwerts erläutert. Es kann mit mehreren Methoden erreicht werden, einschließlich.
- Verwendung der Funktion STRING_SPLIT zum Teilen der Zeichenfolge
- Erstellen Sie eine benutzerdefinierte Tabellenwertfunktion, um die Zeichenfolge zu teilen.
- Verwenden Sie XQuery, um den Zeichenfolgenwert zu teilen und eine begrenzte Zeichenfolge in XML umzuwandeln
Zunächst müssen wir eine Tabelle erstellen und Daten einfügen, die in allen drei Methoden verwendet werden. Die Tabelle sollte eine einzelne Zeile mit Feld-ID und Zeichenfolge mit Trennzeichen enthalten. Erstellen Sie eine Tabelle mit dem Namen "student" mit dem folgenden Code.
TABELLE ERSTELLEN student (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))
Fügen Sie durch Kommas getrennte Schülernamen in eine einzelne Zeile ein, indem Sie den folgenden Code ausführen.
INSERT IN student (student_name) VALUES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')
Überprüfen Sie mit dem folgenden Code, ob Daten in die Tabelle eingefügt wurden oder nicht.
Wählen Sie * vom Schüler
Methode 1: Verwenden Sie die Funktion STRING_SPLIT, um die Zeichenfolge zu teilen
In SQL Server 2016 "STRING_SPLIT" Es wurde eine Funktion eingeführt, die mit der Kompatibilitätsstufe 130 und höher verwendet werden kann. Wenn Sie die SQL Server-Version 2016 oder höher verwenden, können Sie diese integrierte Funktion verwenden.
Außerdem "STRING_SPLIT" Gibt eine Zeichenfolge ein, die Unterzeichenfolgen begrenzt hat, und gibt ein Zeichen ein, das als Trennzeichen oder Trennzeichen verwendet werden soll. Die Funktion gibt eine einspaltige Tabelle aus, deren Zeilen die Unterzeichenfolgen enthalten. Der Name der Ausgabespalte lautet „Wert". Diese Funktion erhält zwei Parameter. Der erste Parameter ist eine Zeichenfolge und der zweite ist ein Trennzeichen oder Trennzeichen, auf dessen Grundlage wir die Zeichenfolge teilen müssen. Die Ausgabe enthält eine einspaltige Tabelle, in der Teilzeichenfolgen vorhanden sind. Diese Ausgabespalte heißt "Wert" wie wir in der Abbildung unten sehen können. Darüber hinaus ist die "STRING SPLIT" Die Funktion table_valued gibt eine leere Tabelle zurück, wenn die Eingabezeichenfolge NULL ist.
Kompatibilitätsstufe der Datenbank:
Jede Datenbank ist mit einer Kompatibilitätsstufe verbunden. Dadurch kann das Verhalten der Datenbank mit der jeweiligen SQL Server-Version kompatibel sein, auf der sie ausgeführt wird.
Jetzt rufen wir die Funktion "string_split" auf, um durch Kommas getrennte Zeichenfolgen aufzuteilen. Die Kompatibilitätsstufe betrug jedoch weniger als 130, weshalb der folgende Fehler ausgelöst wurde. „Ungültiger Objektname ‚SPLIT_STRING‘“
Daher müssen wir die Datenbankkompatibilitätsstufe auf 130 oder höher einstellen. Wir werden diesen Schritt ausführen, um die Kompatibilitätsstufe der Datenbank festzulegen.
- Setzen Sie die Datenbank zunächst mit dem folgenden Code auf "single_user_access_mode".
ALTER DATABASE <[Datenbankname]> SET SINGLE_USER
- Ändern Sie zweitens die Kompatibilitätsstufe der Datenbank mithilfe des folgenden Codes.
ALTER DATABASE <[database_name]> SET COMPATIBILITY_LEVEL = 130
- Versetzen Sie die Datenbank mithilfe des folgenden Codes wieder in den Mehrbenutzerzugriffsmodus.
ALTER DATABASE <[Datenbankname]> SET MULTI_USER
USE [master] GO ALTER DATABASE [Bridge_Centrality] SET SINGLE_USER ALTER DATABASE [Bridge_Centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [Bridge_Centrality] SET MULTI_USER GO
Die Ausgabe wird sein:
Führen Sie nun diesen Code aus, um das gewünschte Ergebnis zu erhalten.
DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FROM STRING_SPLIT (@string_value, ',')
Die Ausgabe für diese Abfrage lautet:
Methode 2: Erstellen Sie zum Teilen der Zeichenfolge eine benutzerdefinierte Tabellenwertfunktion
Diese traditionelle Methode wird sicherlich von allen Versionen von SQL Server unterstützt. In dieser Technik erstellen wir eine benutzerdefinierte Funktion, um die Zeichenfolge durch ein Trennzeichen mit „SUBSTRING"Funktion"CHARINDEX”Und while-Schleife. Diese Funktion kann verwendet werden, um Daten zur Ausgabetabelle hinzuzufügen, da der Rückgabetyp "Tabelle" ist.
CREATE FUNCTION [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABLE (geteilte_Daten NVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @ending_position INT @ @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_positionFühren Sie nun das folgende Skript aus, um eine Teilungsfunktion aufzurufen, um die Zeichenfolge nach Trennzeichen zu teilen.
DECLARE @student_name VARCHAR (MAX); DECLARE @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (SELECT student_name FROM student) SELECT * FROM dbo.split_string (@student_name, @delimiter)Die Ergebnismenge sieht folgendermaßen aus.
Methode 3: Verwenden Sie XQuery, um den Zeichenfolgenwert zu teilen und eine begrenzte Zeichenfolge in XML umzuwandeln
Da benutzerdefinierte Funktionen ressourcenintensiv sind, müssen wir diese Funktionen vermeiden. Eine weitere Option ist die integrierte Funktion "string_split". Diese Funktion kann jedoch für Datenbanken verwendet werden, für die die Kompatibilitätsstufe 130 oder höher ist. Hier kommt also eine andere Lösung, um diese schwierige Aufgabe zu lösen. Eine Zeichenfolge kann wie folgt aufgeteilt werden XML.
DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ersetzen (@string_value, @delimiter_value,' ') + ' ') AS XML) SELECT @xml_valueDie Ausgabe für diese Abfrage lautet:
Wenn Sie die gesamte XML-Datei anzeigen möchten. Klick auf den Link. Sobald Sie geklickt haben, sieht der Linkcode folgendermaßen aus.
Jetzt sollte die XML-Zeichenfolge weiter verarbeitet werden. Schließlich werden wir "x-Query" verwenden, um aus dem XML abzufragen.
DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ersetzen (@string_value, @delimiter_value,' ') + ' ') AS XML) SELECT x.m.query ('. '). Value ('. ',' VARCHAR (15) ') AS VALUE FROM @ xml_value.nodes (' / studentname ') AS x (m)Die Ausgabe sieht folgendermaßen aus: