Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine einzelne Spalte mit mehreren Abonnementnummern in SQL in einzelne Spalten aufteilen?

Wie kann ich eine einzelne Spalte mit mehreren Abonnementnummern in SQL in einzelne Spalten aufteilen?

DDD
Freigeben: 2024-12-17 01:47:24
Original
143 Leute haben es durchsucht

How can I split a single column of multiple subscription numbers into individual columns in SQL?

Abonnementnummern in mehrere Spalten aufteilen

In einer Situation, in der eine einzelne Spalte mehrere Werte enthält, z. B. eine Abonnementnummer, werden diese Werte aufgeteilt in einzelne Spalten kann eine nützliche Technik zur Datenmanipulation sein. Hier ist eine Schritt-für-Schritt-Anleitung:

1. Cross Apply XML Fragmentation:

Dieser Ansatz nutzt XML-Fragmentierung, um die Abonnementnummer in ein XML-Dokument umzuwandeln, sodass einzelne Werte als separate Knoten extrahiert werden können.

Cross Apply (
    Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
          ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
          ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
          ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
          ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
          ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
          ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
    From  (Select Cast('<x>' + replace((Select replace(replace(A.SomeCol,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
) B
Nach dem Login kopieren

Hier: xDim ist das Fragmentierungselement, das die Zeichenfolge der Abonnementnummer in XML konvertiert. Die resultierenden Knoten, nummeriert als x[1], x[2] usw., werden in die Zielspalten extrahiert.

2. Tabelle im laufenden Betrieb erstellen:

Alternativ können Sie die Zieltabelle dynamisch während der Abfrageausführung erstellen. Dadurch entfällt die Notwendigkeit einer expliziten Anweisung zur Tabellenerstellung im Voraus.

Select A.PUB_FORM_NUM
      ,B.*
 Into  MyNewPubTable
 From  @YourTable A
 Cross Apply (
                Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
                      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
                      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
                      ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
                      ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
                      ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
                      ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
                From  (Select Cast('<x>' + replace((Select replace(replace(A.PUB_FORM_NUM,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B
Nach dem Login kopieren

Dieser Ansatz erstellt die MyNewPubTable und fügt die aufgeteilten Abonnementnummernwerte direkt in die Zielspalten ein.

Das obige ist der detaillierte Inhalt vonWie kann ich eine einzelne Spalte mit mehreren Abonnementnummern in SQL in einzelne Spalten aufteilen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage