Mysql-Beispiel für die Aufteilung in mehrere Zeilen und Spalten durch bestimmte Symbole

Mysql-Beispiel für die Aufteilung in mehrere Zeilen und Spalten durch bestimmte Symbole

Einige Fehlercodetabellen verwenden aus historischen oder Leistungsgründen das folgende Entwurfsmuster. Das heißt, mehrere Attributwerte werden in derselben Zeile oder Spalte gespeichert. Wie im tonly_error_record in der folgenden Tabelle gezeigt:


In diesem Fall können Sie die Spalte durch ein Semikolon „;“ aufteilen, um mehrere Zeilen zu bilden, und sie dann durch ein Komma „“, aufteilen, um mehrere Spalten zu bilden. Wie in der folgenden Tabelle gezeigt:

Bildbeschreibung hier einfügen

Dies kann mithilfe der String-Splitting-Funktion in MySQL erreicht werden. Die Funktionsbeschreibung lautet wie folgt:

SUBSTRING_INDEX(Zeichenfolge, Trennzeichen, Anzahl)   
-- str: die zu teilende Zeichenfolge; delim: das Trennzeichen; count: die Häufigkeit, mit der das Trennzeichen vorkommt

Schließlich sieht die konkrete Implementierung wie folgt aus:

#Schritt 1: Aufteilen in mehrere Zeilen basierend auf Semikolon ";" #Schritt 2: Aufteilen in mehrere Spalten basierend auf Komma "," select distinct S1.tbox_vin,
                (wählen Sie Teilstringindex (Teilstringindex (S1.Fehlercode, ',', 1), ',', -1)) als spn,
                (Teilstringindex auswählen (Teilstringindex (S1.Fehlercode, ',', 2), ',', -1)) fmi,
                S1.Zeit ändern
aus (
         wähle t1.tbox_vin,
                Teilstringindex (Teilstringindex (t1.dm1_string, ';', t2.help_topic_id + 1), ';', -1) als Fehlercode,
                t1.Zeit ändern
         von tonly_error_record t1
                  beitreten mysql.help_topic t2
                       auf t2.help_topic_id < (Länge(t1.dm1_string) – Länge(ersetzen(t1.dm1_string, ';', '')) + 1)
         wobei t1.dm1_string nicht null ist
           und t1.dm1_string != '') S1
wobei s1.error_code != ''
  und s1.error_code ist nicht null
Sortierung nach S1.modify_time desc;

Beteiligte Wissenspunkte

1. String-Aufteilung: SUBSTRING_INDEX (str, delim, count)

1. Parametererklärung

Parametername erklären
str Die zu teilende Zeichenfolge
delim Trennzeichen, durch ein Zeichen getrennt
zählen Wenn „Anzahl“ eine positive Zahl ist, werden alle Zeichen vor dem n-ten Trennzeichen übernommen. Wenn „Anzahl“ eine negative Zahl ist, werden alle Zeichen nach dem n-ten Trennzeichen vom Ende her übernommen.

2. Beispiele

(1) Alle Zeichen vor dem zweiten Komma "," als Trennzeichen verwenden.

SUBSTRING_INDEX('7654,7698,7782,7788',',',2)

獲取第2個以“,”逗號為分隔符之前的所有字符

(2) Alle Zeichen nach dem vorletzten Kommatrennzeichen "," abrufen

SUBSTRING_INDEX('7654,7698,7782,7788',',',-2) 

獲取倒數第2個以“,”逗號分隔符之后的所有字符

2. Ersetzungsfunktion: replace(str, from_str, to_str)

1. Parametererklärung

Parametername erklären
str Die zu ersetzende Zeichenfolge
from_str Die zu ersetzende Zeichenfolge
zu_str Die zu ersetzende Zeichenfolge

2. Beispiele

(1) Ersetzen Sie das Trennzeichen ",", Komma durch das Leerzeichen "".

ERSETZEN('7654,7698,7782,7788',',','')

將分隔符“,”逗號替換為“”空

3. Ermitteln Sie die Länge des Strings: LENGTH( str )

1. Parametererklärung

Parametername erklären
str Die zu ersetzende Zeichenfolge
from_str Die zu ersetzende Zeichenfolge
zu_str Die zu ersetzende Zeichenfolge

2. Beispiel (1) Ermitteln der Länge der Zeichenfolge '7654,7698,7782,7788'

LÄNGE('7654,7698,7782,7788') 

獲取 '7654,7698,7782,7788' 字符串的長度

Implementiertes SQL-Parsing

WÄHLEN 
    SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS Nummer 
AUS 
    mysql.hilfe_thema 
WO 
    Hilfethema-ID < LÄNGE('7654,7698,7782,7788')-LÄNGE(ERSETZEN('7654,7698,7782,7788',',',''))+1

Hier wird help_topic_id aus der help_topic-Tabelle der MySQL-Bibliothek als Variable verwendet, da help_topic_id automatisch inkrementiert wird. Natürlich können auch automatisch inkrementierte Felder anderer Tabellen als Hilfe verwendet werden.

help_topic-Tabelle:

help_topic 表

Implementierungsschritte:

Schritt 1: Ermitteln Sie zunächst die Anzahl der Zeichenfolgen, die am Ende aufgeteilt werden müssen, und simulieren Sie mithilfe von help_topic_id das Durchlaufen der n-ten Zeichenfolge.

Der Codeausschnitt beinhaltete:

Hilfethema-ID < LÄNGE('7654,7698,7782,7788')-LÄNGE(ERSETZEN('7654,7698,7782,7788',',',''))+1

實現過程

Schritt 2: Teilen Sie die Zeichenfolge basierend auf dem Komma "," mithilfe der Funktion SUBSTRING_INDEX (str, delim, count) auf und weisen Sie das Ergebnis dem Feld „num“ zu.

Der Codeausschnitt beinhaltete:

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS Nummer

Erster Schritt:

Verwenden Sie das Komma "," als Trennzeichen und fangen Sie alle Zeichenfolgen vor dem n+1. Trennzeichen entsprechend dem Wert von help_topic_id ab. (Hier liegt n+1 daran, dass help_topic_id bei 0 beginnt und wir es hier aus dem ersten Trennzeichen abrufen müssen.)

SUBSTRING_INDEX('7654,7698,7782,7788',',',Hilfethema-ID+1)

Zum Beispiel:
Wenn help_topic_id = 0, ist die erhaltene Zeichenfolge = 7654
Wenn help_topic_id = 1, ist die erhaltene Zeichenfolge = 7654,7698
…(und so weiter)

Schritt 2:

Verwenden Sie das Komma "," als Trennzeichen und extrahieren Sie alle Zeichenfolgen nach dem letzten Trennzeichen.

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',Hilfethema-ID+1),',',-1)

Zum Beispiel:
Laut dem ersten Schritt ist die erhaltene Zeichenfolge 7654, wenn help_topic_id = 0 ist. Zu diesem Zeitpunkt ist die im zweiten Schritt abgefangene Zeichenfolge 7654.
Laut dem ersten Schritt ist die erhaltene Zeichenfolge 7654,7698, wenn help_topic_id = 1 ist. Zu diesem Zeitpunkt ist die im zweiten Schritt abgefangene Zeichenfolge 7698.
…(und so weiter)

Schließlich wurden die folgenden Effekte erfolgreich erzielt ~

這里寫圖片描述

Hinweis: Informationen zum Aufteilen von Zeichenfolgen ohne Trennzeichen finden Sie unter MySQL – Zeichenfolgenaufteilung (Zeichenfolgenabfang ohne Trennzeichen).

Dies ist das Ende dieses Artikels über Beispiele für die Aufteilung von MySQL in mehrere Zeilen und Spalten durch bestimmte Symbole. Weitere Informationen zur MySQL-spezifischen Symbolaufteilung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So teilen und führen Sie mehrere Werte in einem einzigen Feld in MySQL zusammen
  • MySql-Import - CSV-Datei oder tabulatorgetrennte Datei
  • Mysql teilt Zeichenfolge durch gespeicherte Prozedur in Array auf
  • Implementierung einer SPLIT-ähnlichen String-Splitting-Funktion in MySQL

<<:  Ein netter HTML-Druckcode unterstützt das Umblättern

>>:  Unterschied zwischen src- und href-Attributen

Artikel empfehlen

So verwenden Sie SVG-Symbole in WeChat-Applets

SVG wurde in den letzten Jahren aufgrund seiner v...

Gojs implementiert Ameisenlinien-Animationseffekt

Inhaltsverzeichnis 1. Gojs-Implementierung 1. Zei...

5 Möglichkeiten, um festzustellen, ob ein Objekt in JS ein leeres Objekt ist

1. Konvertieren Sie das JSON-Objekt in eine JSON-...

Welche Bilddateiformate gibt es und wie wählt man sie aus?

1. Welche drei Formate? Dies sind: gif, jpg und pn...

Nginx-Dienst 500: Interner Serverfehler einer der Gründe

500 (Interner Serverfehler) Auf dem Server ist ei...

Detaillierte Erklärung der Kartenüberlagerung in OpenLayers6

1. Overlay-Übersicht Overlay bedeutet Überlagerun...

Diskussion über Standard-Rand- und Füllwerte allgemeiner Elemente

Heute haben wir die Frage besprochen, wie hoch de...

Detailliertes Beispiel für Zeilensperren in MySQL

Vorwort Sperren sind Synchronisierungsmechanismen...

Detaillierte Erklärung der Lösung für das zu langsame Docker-Compose

Es gibt nur eine Lösung: die Quelle ändern! Die Q...

Allgemeine Shell-Skriptbefehle und zugehöriges Wissen unter Linux

Inhaltsverzeichnis 1. Einige Punkte, die Sie beac...