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

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

Barbara Streisand
Freigeben: 2024-12-25 20:39:14
Original
652 Leute haben es durchsucht

How Can I Split a Single Column of Subscription Numbers into Multiple Columns in SQL?

Eine einzelne Spalte in mehrere aufteilen

Bei diesem Problem geht es um die Manipulation von Daten in einer Tabellenspalte, um zusätzliche Spalten zu erstellen. Die ursprüngliche Spalte speichert Abonnementnummern in einem einzigen Wert. Unsere Aufgabe besteht darin, die verschiedenen Teile dieser Abonnementnummern zu extrahieren und sie auf mehrere Spalten zu verteilen.

Ein kreativer Ansatz besteht darin, eine Kombination aus String-Manipulation und XML-Verarbeitung zu verwenden. So funktioniert es:

Schritt 1: Umwandeln der Abonnementnummer in eine XML-Struktur

Wir ersetzen alle Leerzeichen in der Abonnementnummer durch Bindestriche und verwenden dann die Funktion replace(), um die Bindestriche umzuwandeln zu einem speziellen Trennzeichen, sagen wir §§Split§§. Dadurch können wir die transformierte Zahl als XML-Struktur anzeigen.

replace(replace(subscription_number, ' ', '-'), '-', '§§Split§§')
Nach dem Login kopieren

Die transformierte Zahl wird zu:

<x>SC-5-1395-174-25P</x>
Nach dem Login kopieren

Schritt 2: Werte aus der XML-Struktur extrahieren

Mit der Funktion Cast() verpacken wir die transformierte Zahl in XML-Tags und extrahieren dann einzelne Teile mit der Funktion xDim.value(). Um beispielsweise den ersten Teil (SC) zu erhalten, verwenden wir:

ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
Nach dem Login kopieren

Schritt 3: Extrahierte Werte neuen Spalten zuweisen

Wir verwenden eine Kreuzanwendung, um die extrahierten Werte zuzuweisen die neuen Spalten in unserem Ergebnissatz. Hier ist ein Beispiel:

Select A.subscription_number,
       B.Pos1 as Col1,
       B.Pos2 as Col2,
       B.Pos3 as Col3,
       B.Pos4 as Col4,
       B.Pos5 as Col5,
       B.Pos6 as Col6,
       B.Pos7 as Col7
From table 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.subscription_number, ' ', '-'), '-', '§§Split§§') as [*] For XML Path('')), '§§Split§§', '</x><x>') + '</x>' as xml) as xDim
    ) as A
) B
Nach dem Login kopieren

Dieser Ansatz ermöglicht es uns, einen einzelnen Spaltenwert elegant in mehrere neue Spalten aufzuteilen und so eine saubere und strukturierte Möglichkeit zum Speichern und Zugreifen auf Daten bereitzustellen.

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