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.

CREATE TABLE 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 INTO student (student_name)
VALUES ('Monroy,Montanez,Marolahakis,Negley,Albright,Garofolo,Pereira,Johnson,Wagner,Conrad')
Tabellenerstellung und Dateneinfügung

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

select * from student
Überprüfen Sie, ob Daten 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 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:

Jeder Datenbank ist in Verbindung gebracht mit ein Kompatibilität Niveau. Es ermöglicht das Datenbanken Verhalten zu Sein kompatibel mit The besonders SQL Server Ausführung es läuft auf.

Jetzt rufen wir die Funktion “string_split” auf, um durch Kommas getrennte Zeichenfolgen zu teilen. Die Kompatibilitätsstufe betrug jedoch weniger als 130, weshalb der folgende Fehler ausgelöst wurde. “Ungültiger Objektname ‘SPLIT_STRING'”

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 <[database_name]> 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 <[database_name]> 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:

Ä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:

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 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(splited_data NVARCHAR(MAX)
)
BEGIN
    DECLARE @start_position INT,
            @ending_position INT
    SELECT @start_position = 1,
            @ending_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(SUBSTRING(@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 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 wird so aussehen.

Ergebnismenge aus der Tabellenwertfunktion "split_string"

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(( ''
                  + Replace(@string_value, @delimiter_value, '')
                  + '' ) AS XML)
SELECT @xml_value

Die Ausgabe für diese Abfrage lautet:

Schritt 1 zum Teilen einer Zeichenfolge 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.

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   x.m.query('.').value('.', 'VARCHAR(15)') AS VALUE
FROM   @xml_value.nodes('/studentname') AS x(m)

Die Ausgabe sieht folgendermaßen aus:

Verwendung von "XQuery" zum Abfragen aus dem XML

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *