Heim > Datenbank > MySQL-Tutorial > Wie teile ich getrennte Werte in einer SQL-Spalte in mehrere Zeilen auf?

Wie teile ich getrennte Werte in einer SQL-Spalte in mehrere Zeilen auf?

Patricia Arquette
Freigeben: 2025-01-03 18:33:43
Original
276 Leute haben es durchsucht

How to Split Delimited Values in a SQL Column into Multiple Rows?

Durch Trennzeichen getrennte Werte in einer SQL-Spalte in mehrere Zeilen aufteilen

In Situationen, in denen eine SQL-Spalte durch Trennzeichen getrennte Daten enthält, kann eine Extraktion erforderlich sein und formatieren Sie die Werte in mehrere Zeilen. Diese Aufgabe stellt eine besondere Herausforderung dar, wenn es um große Datenmengen oder extrem lange, durch Trennzeichen getrennte Zeichenfolgen geht.

Betrachten Sie das folgende Beispiel:

Quelltabelle

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected];[email protected];[email protected]

Gewünschte Ausgabe

message-id recipient-address
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]

Für SQL Server-Versionen 2016 und höher bietet die Funktion STRING_SPLIT eine unkomplizierte Lösung:

SELECT s.[message-id], f.value
FROM dbo.SourceData AS s
CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') AS f;
Nach dem Login kopieren

Vor SQL Server 2016 kann eine benutzerdefinierte Teilungsfunktion erstellt werden:

CREATE FUNCTION dbo.SplitStrings
(
    @List NVARCHAR(MAX),
    @Delimiter NVARCHAR(255)
)
RETURNS TABLE
AS
RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number,
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO
Nach dem Login kopieren

Wenn die Teilungsfunktion vorhanden ist , können die Daten extrahiert und formatiert werden:

SELECT s.[message-id], f.Item
FROM dbo.SourceData AS s
CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') AS f;
Nach dem Login kopieren

Durch die Nutzung dieser Techniken ist es möglich, durch Trennzeichen effizient aufzuteilen Werte in mehrere Zeilen aufteilen und so Datenformatierungs- und Analyseaufgaben vereinfachen.

Das obige ist der detaillierte Inhalt vonWie teile ich getrennte Werte in einer SQL-Spalte in mehrere Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage