Heim >Datenbank >MySQL-Tutorial >Wie teilt man getrennte Werte in einer SQL-Spalte effizient in mehrere Zeilen auf?

Wie teilt man getrennte Werte in einer SQL-Spalte effizient in mehrere Zeilen auf?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 12:47:11721Durchsuche

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

Begrenzte Werte in einer SQL-Spalte in mehrere Zeilen aufteilen

Beim Umgang mit Tabellen, die begrenzte Werte in einer einzelnen Spalte enthalten, z. B. einem Empfänger -Adressfeld durch Semikolon (;) getrennt, müssen diese Werte zur weiteren Verarbeitung oder Analyse in mehrere Zeilen aufgeteilt werden. In diesem Artikel werden verschiedene Methoden untersucht, um dies mithilfe von SQL zu erreichen, wobei der Schwerpunkt insbesondere auf der Optimierung von Leistung und Effizienz liegt.

Verwenden der STRING_SPLIT-Funktion für SQL Server 2016

Wenn Sie SQL Server verwenden 2016 oder höher können Sie die Funktion STRING_SPLIT nutzen, um getrennte Werte effizient aufzuteilen. Die Syntax für diese Funktion lautet wie folgt:

STRING_SPLIT(@list, @delimiter)

So können Sie STRING_SPLIT verwenden, um Empfängeradressen in separate Zeilen zu extrahieren:

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

Erstellen einer Split-Funktion für Pre -SQL Server 2016-Versionen

Für SQL Server-Versionen vor 2016 ist dies möglich Erstellen Sie eine benutzerdefinierte Teilungsfunktion. Ein Beispiel für eine solche Funktion ist:

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

Sie können diese Funktion dann verwenden, um begrenzte Werte wie folgt aufzuteilen:

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

Optimierung und Überlegungen

Um eine optimale Leistung zu gewährleisten, beachten Sie die folgenden Tipps:

  • Verwenden Sie die für Sie geeignete Methode SQL Server-Version.
  • Vermeiden Sie die Verwendung des LIKE-Operators zur Suche nach Trennzeichen, da dies ineffizient sein kann.
  • Indizieren Sie die Spalte „Empfängeradresse“ für schnellere Suchvorgänge.
  • Dividieren Sie groß Datensätze in kleinere Blöcke zur Verarbeitung aufteilen.
  • Verwenden Sie die Bulk-Insert-Mechanismen von SQL Server, um Daten effizient in die zu importieren Datenbank.

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

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