So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort

Hinweis: Die Testdatenbankversion ist MySQL 8.0

Testdaten:

Tabelle erstellen zqs(id int,str varchar(1000));

in zqs(id,str) Werte einfügen (1,'【JD.com】abc【China Telecom】');
in zqs(id,str) Werte einfügen (1,'【JD.com】abc【China Telecom】def');
in zqs(id,str) Werte einfügen (1, '****【JD.com】abc【China Telecom】def');
in zqs(id,str) Werte einfügen (1,'****【JD.com】abc');
in zqs(id,str) Werte einfügen (1, '【JD.com】abc【China Telecom】【China Unicom】');

1. Nachfrage

Wir stoßen häufig auf ähnliche Anforderungen wie bei SMS und müssen SMS-Tag-Informationen extrahieren, es können jedoch mehrere SMS-Tags vorhanden sein.

Dieses Beispiel geht davon aus, dass höchstens 3 Tags vorhanden sind und soll wie folgt ausgegeben werden:

mysql> wähle * aus zqs;
±-----±----------------------------------------------------+
| Ich würde | str |
±-----±----------------------------------------------------+
| 1 | 【JD.com】abc【China Telecom】 |
| 1 | 【JD.com】abc【China Telecom】def |
| 1 | ****【JD.com】abc【China Telecom】def |
| 1 | ****【JD.com】abc |
| 1 | 【JD.com】abc【China Telecom】【China Unicom】 |
±-----±----------------------------------------------------+

Die erforderliche Ausgabe ist wie folgt:

±--------------±--------------------±--------------------+
| erster_Wert | erster_Wert2 | erster_Wert3 |
±--------------±--------------------±--------------------+
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | | |
| 【JD.com】 | 【China Telecom】 | 【China Unicom】 |
±--------------±--------------------±--------------------+

2. Lösung

Die Zeichenfolgenabfangfunktionen substr und instr von Oracle können zusammen verwendet werden, allerdings ist die instr-Funktion von MySQL schwächer als die instr-Funktion von Oracle.

Zu diesem Zeitpunkt müssen Sie die MySQL-regulären Ausdrücke regexp_instr und substr verwenden.

wähle Teilstrich(strich,
   regexp_instr(str,'【',1,1),
   regexp_instr(str,'】',1,1) - regexp_instr(str,'【',1,1) + 1 ) erster_Wert, 
  substr(str,
   regexp_instr(str,'【',1,2),
   regexp_instr(str,'】',1,2) - regexp_instr(str,'【',1,2) + 1) first_va2, 
  substr(str,
   regexp_instr(str,'【',1,3),
   regexp_instr(str,'】',1,3) - regexp_instr(str,'【',1,3) + 1) first_va3
 von zqs;

Testprotokoll:

mysql> wähle Teilzeichen (Zeichenfolge,
 -> regexp_instr(str,'【',1,1),
 -> regexp_instr(str,'】',1,1) - regexp_instr(str,'【',1,1) + 1 ) erster_Wert,
 -> substr(str,
 -> regexp_instr(str,'【',1,2),
 -> regexp_instr(str,'】',1,2) - regexp_instr(str,'【',1,2) + 1) first_va2,
 -> substr(str,
 -> regexp_instr(str,'【',1,3),
 -> regexp_instr(str,'】',1,3) - regexp_instr(str,'【',1,3) + 1) first_va3
 -> von zqs;
+--------------+--------------------+--------------------+
| erster_Wert | erster_Wert2 | erster_Wert3 |
+--------------+--------------------+--------------------+
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | 【China Telecom】 | |
| 【JD.com】 | | |
| 【JD.com】 | 【China Telecom】 | 【China Unicom】 |
+--------------+--------------------+--------------------+
5 Zeilen im Satz (0,00 Sek.)

Zusammenfassen

Dies ist das Ende dieses Artikels zum Extrahieren von Zeichenfolgenelementen aus nicht festgelegten Positionen in MySQL. Weitere Informationen zum Extrahieren von Zeichenfolgenelementen aus MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

<<:  Vue implementiert einen einfachen Laufschrifteffekt

>>:  Beispielcode zur Implementierung der Ellipsenbahnrotation mit CSS3

Artikel empfehlen

Detaillierte Erläuterung des SSR-Server-Side-Rendering-Beispiels von Vue

Warum Server-Side Rendering (SSR) verwenden? Bess...

MYSQL METADATA LOCK (MDL LOCK) Theorie und Sperrtyptest

Inhaltsverzeichnis MYSQL METADATA LOCK (MDL LOCK)...

Detaillierte Erklärung dieser Referenz in React

Inhaltsverzeichnis Ursache: durchlaufen: 1. Konst...

So führen Sie JavaScript in Jupyter Notebook aus

Später habe ich auch hinzugefügt, wie man Jupyter...

Lösung für das Versagen von Docker beim Freigeben von Ports

Heute bin ich auf eine sehr seltsame Situation ge...

MySQL partitioniert vorhandene Tabellen in der Datentabelle

Inhaltsverzeichnis So funktioniert es Betriebsabl...

Detaillierte Erläuterung der Verwaltung und Verwendung von Docker Secrets

1. Was ist Docker Secret 1. Szenariodarstellung W...

Unterschied und Implementierung von JavaScript Anti-Shake und Throttling

Inhaltsverzeichnis 1. Anti-Shake 2. Drosselung 3....

Über das Problem der vertikalen Zentrierung von img und span in div

Wie unten dargestellt: XML/HTML-CodeInhalt in die...

Zusammenfassung der bei der Arbeit häufig verwendeten Linux-Befehle

Verwenden Sie bei der Arbeit mehr Open-Source-Too...

So vermeiden Sie die URL-Zeitzonenfalle in MySQL

Vorwort Wenn Sie MySQL 6.0.x oder höher (JAR) ver...

Mysql-Optimierungstechniken zum Abfragen von Daten basierend auf der Zeit

Um beispielsweise die gestern neu registrierten B...