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

Wie teile ich die Daten einer Spalte in SQL in mehrere Zeilen auf?

Patricia Arquette
Freigeben: 2025-01-05 07:03:42
Original
412 Leute haben es durchsucht

How to Split a Column's Data into Multiple Rows in SQL?

Wie teilt man Spaltendaten in SQL in Zeilen auf?

Bei der Arbeit mit relationalen Datenbanken kann es vorkommen, dass Sie die Daten aufteilen müssen Daten in einer einzelnen Spalte in mehrere Zeilen aufteilen. Diese Technik ist besonders nützlich für Szenarien wie die Aufteilung einer durch Kommas getrennten Liste von Elementen in einzelne Zeilen.

Um dies zu erreichen, können Sie die Leistungsfähigkeit von String-Manipulationsfunktionen in SQL nutzen. Sehen wir uns zwei Methoden zum Aufteilen von Spaltendaten in Zeilen an:

1. Verwenden einer Teilungsfunktion:

Sie können eine benutzerdefinierte Teilungsfunktion erstellen, um die Spaltendaten basierend auf einem bestimmten Trennzeichen wie einem Komma oder einem Semikolon zu teilen. Hier ist eine Beispielfunktion, die Sie verwenden können:

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT
    DECLARE @slice VARCHAR(8000)

    SELECT @idx = 1
    IF LEN(@String)<1 OR @String IS NULL RETURN

    WHILE @idx!= 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)
        IF @idx!=0
            SET @slice = LEFT(@String,@idx - 1)
        ELSE
            SET @slice = @String

        IF(LEN(@slice)>0)
            INSERT INTO @temptable(Items) VALUES(@slice)

        SET @String = RIGHT(@String,LEN(@String) - @idx)
        IF LEN(@String) = 0 BREAK
    END

    RETURN
END;
Nach dem Login kopieren

2. Verwendung eines rekursiven CTE:

Alternativ können Sie einen rekursiven Common Table Expression (CTE) verwenden, um das gleiche Ergebnis zu erzielen. Hier ist eine CTE-Lösung:

WITH cte (code, DeclarationItem, Declaration) AS
(
  SELECT Code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
         STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM yourtable
  UNION ALL
  SELECT code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
    STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM cte
  WHERE Declaration > ''
)
SELECT code, DeclarationItem
FROM cte
Nach dem Login kopieren

Beispielverwendung:

Um die Spalte „Declaration“ in der Tabelle „yourtable“ in einzelne Zeilen aufzuteilen, können Sie beide verwenden der oben genannten Methoden. Zum Beispiel:

SELECT t1.code, s.items AS declaration
FROM yourtable t1
OUTER APPLY dbo.split(t1.declaration, ',') s
Nach dem Login kopieren

Diese Abfrage erzeugt ein Ergebnis, bei dem die Spalte „Deklaration“ für jedes Element in separate Zeilen aufgeteilt ist.

Das obige ist der detaillierte Inhalt vonWie teile ich die Daten einer Spalte in SQL 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