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

Vue implementiert ein verschiebbares Baumstrukturdiagramm

Inhaltsverzeichnis Rekursive Vue-Komponente Drag-...

Schritte und Fallstricke beim Upgrade von Linux MySQL 5.5 auf MySQL 5.7

Inhaltsverzeichnis Linux MySQL 5.5 auf MySQL 5.7 ...

Detaillierte Zusammenfassung des JavaScript-Arrays

Inhaltsverzeichnis 1. Array-Induktion 1. Teilen S...

Was ist nach der Installation von Ubuntu 20.04 zu tun (Anleitung für Anfänger)

Ubuntu 20.04 wurde veröffentlicht und bringt viel...

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...

So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu

MySQL-Filterungs-Timing von Where-Bedingungen und...

5 Punkte, auf die Sie beim Erstellen einer Webseite achten sollten

1. Farbabstimmungsproblem <br />Eine Webseit...

Verwenden Sie js, um ein einfaches Schlangenspiel zu schreiben

In diesem Artikel wird der spezifische Code eines...

Linux-Methodenbeispiel zum Anzeigen aller Informationen des Prozesses

Auf dem Server läuft ein Taskprozess. Wenn wir ih...

Eine einfache Möglichkeit, das Passwort in MySQL 5.7 zu ändern

Dies ist ein offizieller Screenshot. Nach der Ins...

Wartungsmethode für den Innodb-Systemtabellenbereich

Umweltbeschreibung: Es gibt eine laufende MySQL-U...