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;
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
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
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!