Heim > Datenbank > MySQL-Tutorial > Wie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?

Wie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?

Mary-Kate Olsen
Freigeben: 2025-01-05 10:06:45
Original
1003 Leute haben es durchsucht

How to Transform Comma-Separated Values in a SQL Column into Separate Rows?

SQL abfragen, um Spaltendaten in Zeilen aufzuteilen

Problem:

Sie haben eine Tabelle mit zwei Spalten, Code und Erklärung. Die Spalte „Deklaration“ enthält eine durch Kommas getrennte Werteliste. Sie müssen diese Daten in Zeilen umwandeln, wobei jede Zeile eine separate Deklaration für den entsprechenden Code darstellt.

Lösung:

Ein Ansatz zur Lösung dieses Problems besteht darin, eine zu erstellen benutzerdefinierte SQL-Funktion:

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

Sie können diese Funktion dann in einer Abfrage nutzen, indem Sie eine äußere Anwendung verwenden, um eine Verbindung zu Ihrer vorhandenen herzustellen Tabelle:

select t1.code, s.items declaration
from yourtable t1
outer apply dbo.split(t1.declaration, ',') s
Nach dem Login kopieren

Diese Abfrage liefert das gewünschte Ergebnis:

| CODE |  DECLARATION |
-----------------------
|  123 |     a1-2 nos |
|  123 |  a2- 230 nos |
|  123 |    a3 - 5nos |
Nach dem Login kopieren

Alternativ können Sie eine CTE-Version (Common Table Expression) verwenden, die ähnlich funktioniert:

;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

Das obige ist der detaillierte Inhalt vonWie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?. 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