Beispiel-Tutorial zum Zusammenführen und Teilen von MySQL nach angegebenen Zeichen

Beispiel-Tutorial zum Zusammenführen und Teilen von MySQL nach angegebenen Zeichen

Vorwort

Das Zusammenführen oder Aufteilen anhand bestimmter Zeichen ist ein gängiges Szenario. Zusammenführungen lassen sich in MySQL relativ einfach schreiben, das Aufteilen anhand bestimmter Zeichen ist jedoch relativ mühsam (d. h. Sie müssen mehr Zeichen schreiben). Dieser Artikel zeigt anhand von Beispielen, wie Sie entsprechend angegebener Zeichen zusammenführen und teilen.

1. Fusion

In MySQL-Datenbanken kann group_concat verwendet werden, um Daten entsprechend angegebener Zeichen zusammenzuführen.

Erstellen einer Testtabelle

mysql> Tabelle erstellen tb_group(id int auto_increment Primärschlüssel, col1 varchar(20));
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

Testdaten einfügen

mysql> einfügen in tb_group(col1) Werte('a'),('c'),('dddd'),('ewdw'),('vxgdh');;
Abfrage OK, 5 Zeilen betroffen (0,01 Sek.)
Datensätze: 5 Duplikate: 0 Warnungen: 0

Den Inhalt des Felds col1 zusammenführen

Standardmäßig werden sie durch Kommas getrennt, zum Beispiel:

mysql> wähle group_concat(col1) aus tb_group; 
+---------------------+
| Gruppe_Verkettung(Spalte1) |
+---------------------+
| a, c, dddd, ewdw, vxgdh |
+---------------------+
1 Zeile im Satz (0,01 Sek.)

Geben Sie Trennzeichen zum Zusammenführen an. Geben Sie zum Zusammenführen beispielsweise das Symbol || an.

mysql> wähle group_concat(col1,'||') aus tb_group; 
+-------------------------------+
| group_concat(Spalte1,'||') |
+-------------------------------+
| a||,c||,dddd||,ewdw||,vxgdh|| |
+-------------------------------+
1 Zeile im Satz (0,00 Sek.)

Beachten

Standardmäßig darf die kombinierte Länge 1024 nicht überschreiten, da sonst das Ergebnis abgeschnitten wird.

Ich schreibe zum Beispiel ein Skript, um einige Daten einzufügen

# Verwenden Sie ein Shell-Skript, um vim test_insert.sh zu implementieren
# Fügen Sie den folgenden Inhalt hinzu #!/bin/bash
#gjc

für i in {1..1025}
Tun
 mysql -uroot -p'123456' --socket=/data/mysql3306/tmp/mysql.sock -e "einfügen in testdb.tb_group1(col1)values('a')"
Erledigt

# Führen Sie das Skript zum Einfügen von Daten aus sh test_insert.sh
mysql> wähle count(*) aus tb_group;
+----------+
| Anzahl(*) |
+----------+
| 1030 |
+----------+
1 Zeile im Satz (0,00 Sek.)

Erneut zusammenführen

mysql> wähle group_concat(col1)cols, Länge(group_concat(col1)) col_len aus tb_group\G
*************************** 1. Reihe ***************************
 cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,
Spaltenlänge: 1024
1 Zeile im Satz, 2 Warnungen (0,01 Sek.)

Es ist ersichtlich, dass die Gesamtlänge der Bytes im Ergebnis nur 1024 beträgt

In dieser Situation ist es im tatsächlichen Einsatz definitiv nicht zufriedenstellend. Wie kann man das Problem lösen? Tatsächlich hängt diese Länge direkt mit dem Parameter group_concat_max_len der MySQL-Datenbank zusammen (der Standardwert ist 1024).

mysql> globale Variablen wie „group_concat_max_len“ anzeigen;
+----------------------+----------+
| Variablenname | Wert |
+----------------------+----------+
| Gruppen-Concat_Max_Länge | 1024 |
+----------------------+----------+
1 Zeile im Satz (0,08 Sek.)

Passen wir die Parameter an.

/* Ändern Sie die globalen Parameter, sodass alle neuen Verbindungen wirksam werden*/
mysql> setze global group_concat_max_len=102400;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

/* Ändern Sie die Sitzungsparameter so, dass die aktuelle Verbindung wirksam werden kann, ohne beendet zu werden*/
mysql> setze Sitzung group_concat_max_len=102400;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> globale Variablen wie „group_concat_max_len“ anzeigen;
+----------------------+--------+
| Variablenname | Wert |
+----------------------+--------+
| group_concat_max_len | 102400 |
+----------------------+--------+
1 Zeile im Satz (0,00 Sek.)

mysql> Variablen wie „group_concat_max_len“ anzeigen;
+----------------------+--------+
| Variablenname | Wert |
+----------------------+--------+
| group_concat_max_len | 102400 |
+----------------------+--------+
1 Zeile im Satz (0,01 Sek.)

Lassen Sie es uns erneut zusammenführen.

mysql> wähle group_concat(col1)cols, Länge(group_concat(col1)) col_len aus tb_group\G
*************************** 1. Reihe ***************************
 cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
col_len: 2069
1 Zeile im Satz (0,01 Sek.)

Das ist das richtige Ergebnis. Daher wird empfohlen, diesen Parameter in der Produktionsumgebung auf eine geeignete Größe anzupassen.

(Tipps: Sie können listagg oder wm_concat und andere Methoden verwenden, um dies in der Oracle-Datenbank zu implementieren. Es ist auch relativ einfach und kann selbst getestet werden.)

2. Teilen

Das Aufteilen einer Zeichenfolge nach bestimmten Zeichen ist ebenfalls ein gängiges Szenario. Allerdings ist die Zeichenfolgenaufteilung in MySQL-Datenbanken nicht so bequem wie in anderen Datenbanken (andere Datenbanken verfügen über direkte Aufteilungsfunktionen) und erfordert zur Unterstützung der Implementierung die Hilfe der Tabelle mysql.help_topic in der MySQL-Bibliothek. Hier sind einige Beispiele:

Erstellen von Testtabellen und Daten

mysql> Tabelle erstellen tb_split(id int Primärschlüssel auto_increment,col1 varchar(20));
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

mysql> einfügen in tb_split(col1) Werte('a,b,c,d'),('c,a,g,h');
Abfrage OK, 2 Zeilen betroffen (0,01 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

Durch Komma trennen

mysql> SELECT a.id, Teilstring_index(Teilstring_index(a.col1, ',', b.help_topic_id + 1), ',',- 1) NAME FROM tb_split a JOIN mysql.help_topic b ON b.help_topic_id < (Länge(a.col1) - Länge(REPLACE(a.col1, ',', '')) + 1);
+----+------+
| Ich würde | NAME |
+----+------+
| 1 | ein |
| 1 | b |
| 1 | c |
| 1 |
| 2 | c |
| 2 | ein |
| 2 | g |
| 2 | h |
+----+------+
8 Zeilen im Satz (0,00 Sek.)

Dadurch wird die Aufteilung erreicht.

Nach angegebenen Zeichen aufteilen

Wenn es ein anderes Trennzeichen ist, ändern Sie einfach das Trennzeichenfeld von Ruiyang.

mysql> einfügen in tb_split(col1) Werte('a|v|f');
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> wähle * aus tb_split;
+----+---------+
| Ich würde | Spalte1 |
+----+---------+
| 1 | a, b, c, d |
| 2 | c, a, g, h |
| 3 | a|v|f |
+----+---------+
3 Zeilen im Satz (0,01 Sek.)

mysql> SELECT a.id, Teilstring_index(Teilstring_index(a.col1, '|', b.help_topic_id + 1), '|',- 1) col_split FROM tb_split a JOIN mysql.help_topic b ON b.help_topic_id < (Länge(a.col1) - Länge(REPLACE(a.col1, '|', '')) + 1), wobei a.id=3;
+----+-----------+
| Ich würde | Spaltenaufteilung |
+----+-----------+
| 3 | ein |
| 3 | v |
| 3 | f |
+----+-----------+
3 Zeilen im Satz (0,00 Sek.)

Damit ist das Zusammenführen und Aufteilen gemäß den angegebenen Zeichen abgeschlossen.

3. Fazit

In diesem Artikel werden die allgemeinen Zusammenführungs- und Aufteilungsmethoden von MySQL vorgestellt. Studenten, die gut im Schreiben von SQL sind, können auch andere Methoden verwenden, um die Anforderungen unzureichender Berechtigungen zu lösen (zum Beispiel sind beim Aufteilen Berechtigungen für die Tabelle help_topic der MySQL-Bibliothek erforderlich).

Dies ist das Ende dieses Artikels über das Zusammenführen und Aufteilen von MySQL nach angegebenen Zeichen. Weitere Informationen zum Zusammenführen und Aufteilen von MySQL nach angegebenen Zeichen finden Sie in früheren Artikeln auf 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:
  • MySQL-String-Splitting-Beispiel (String-Extraktion ohne Trennzeichen)
  • MySQL-String-Aufteilungsvorgang (String-Abfangen mit Trennzeichen)
  • Vertikales und horizontales Aufteilen von MySQL-Tabellen
  • Anwendungsbeispiele für MySQL-Interception- und Split-String-Funktionen
  • Zusammenfassung der Datenaufteilung in MySQL-Datenbanken: Unterbibliothek und Untertabelle
  • Allgemeine MySQL-Datenaufteilungsmethoden
  • Verwenden Sie Perl, um die Datentabelle (MySQL) aufzuteilen und die Dateninstanz zu migrieren
  • mysql teilt eine Datenzeile basierend auf Kommas in mehrere Zeilen auf

<<:  Beispiele für die Verwendung von „Provide“ und „Inject“ in Vue2.0/3.0

>>:  Detaillierte Erläuterung des Prozesses zum Konfigurieren mehrerer SVN-Repositorys auf Linux-Servern

Artikel empfehlen

So verwenden Sie Dayjs zum Berechnen gängiger Daten in Vue

Bei der Verwendung von Vue zur Entwicklung von Pr...

So richten Sie eine VSCode-Remoteverbindung zum Server-Docker-Container ein

Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...

10 Tipps zur Website-Benutzerfreundlichkeit, die jeder kennen sollte

Lassen Sie uns keine weitere Zeit verschwenden un...

So stellen Sie LNMP und phpMyAdmin in Docker bereit

Umweltvorbereitung: Stellen Sie lnmp auf einem Ho...

So implementieren Sie eine bidirektionale MySQL-Sicherung

Die bidirektionale MySQL-Sicherung wird auch als ...

Beispielcode zur Implementierung von Neon-Button-Animationseffekten mit CSS3.0

Heute zeige ich Ihnen einen Neon-Button-Animation...

Teilen Sie 101 MySQL-Debugging- und Optimierungstipps

MySQL ist eine leistungsstarke Open-Source-Datenb...

Lösungen für Dateien/Ordner, die unter Linux nicht gelöscht werden können

Vorwort Kürzlich wurde unser Server von Hackern a...

SQL-Implementierung von LeetCode (182. Doppelte Postfächer)

[LeetCode] 182.Doppelte E-Mails Schreiben Sie ein...

CSS, um den kleinen scharfen Eckeneffekt von Blasen zu erzielen

Effektbild (die Rahmenfarbe ist zu hell, setzen S...