Logo nowadaytechnol.com
Artikel 2023

Wie Teile Ich Einen String Durch Ein Begrenztes Zeichen In SQL Server?

Inhaltsverzeichnis:

Wie Teile Ich Einen String Durch Ein Begrenztes Zeichen In SQL Server?
Wie Teile Ich Einen String Durch Ein Begrenztes Zeichen In SQL Server?
Video: Wie Teile Ich Einen String Durch Ein Begrenztes Zeichen In SQL Server?
Video: 23. Базы данных (Часть 1) 2023, Februar
Anonim

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 begrenzte Zeichenfolgen 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 eine 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')

Image
Tabellenerstellung und Dateneinfügung

Überprüfen Sie mit dem folgenden Code, ob Dathas in die Tabelle eingefügt wurden oder nicht.

Wählen Sie * vom Schüler

Image
Überprüfen Sie, ob Dathas in die Tabelle "student" eingefügt wurden

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 ein Trennzeichen, anhand dessen die Zeichenfolge aufgeteilt werden muss. 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 der 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'"

Image
Ein Fehler tritt auf, wenn die Kompatibilitätsstufe der Datenbank niedriger als 130 ist. "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 SET SINGLE_USER

Ändern Sie zweitens die Kompatibilitätsstufe der Datenbank mithilfe des folgenden Codes

ALTER DATABASE SET COMPATIBILITY_LEVEL = 130

Versetzen Sie die Datenbank mithilfe des folgenden Codes wieder in den Mehrbenutzerzugriffsmodus

ALTER DATABASE 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:

Image
Ändern Sie die Kompatibilitätsstufe auf 130

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:

Image
Ausgabe der Build_in-Funktion "split_string"

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 der Ausgabetabelle datto 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 (splited_datNVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @ending_position @T @ end_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_position <LEN (@string_value) + 1 BEGIN IF @ending_position = 0 SET @ending_position = LEN (@string_value) + 1 INSERT INTO @result_set (splited_data) VALUES (@BST string_value, @start_position, @ending_position - @start_position)) SET @start_position = @ending_position + 1 SET @ending_position = CHARINDEX (@delimiter_character, @string_value, @start_position) END RETURN END

Führen Sie nun das folgende Skript aus, um die Split-Funktion aufzurufen und 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.

Image
Ergebnismenge aus der Tabellenwertfunktion "split_string"

Methode 3: Verwenden Sie XQuery, um den Zeichenfolgenwert zu teilen und begrenzte Zeichenfolgen 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. 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 (('' + Replace () @string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

Die Ausgabe für diese Abfrage lautet:

Image
Schritt 1 zum Teilen von Zeichenfolgen mithilfe von XML

Wenn Sie die gesamte XML-Datei anzeigen möchten. Klick auf den Link. Sobald Sie geklickt haben, sieht der Linkcode folgendermaßen aus.

Image
Eine XML-Datei, die einzelne Knoten der zu teilenden Zeichenfolge enthält

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 (('' + Replace () @string_value, @delimiter_value, '') + '') AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') AS x (m)

Die Ausgabe sieht folgendermaßen aus:

Image
Verwendung von "XQuery" zum Abfragen aus dem XML

Beliebt nach Thema