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:
|
<<: Beispiele für die Verwendung von „Provide“ und „Inject“ in Vue2.0/3.0
Bei der Verwendung von Vue zur Entwicklung von Pr...
Ich habe vor Kurzem eine Reihe statistischer Funk...
Beim Ändern der Zeitzone unter Linux ist es immer...
Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...
Inhaltsverzeichnis Vorwort Start Grundlegendes La...
Lassen Sie uns keine weitere Zeit verschwenden un...
Dieser Artikel veranschaulicht anhand von Beispie...
Umweltvorbereitung: Stellen Sie lnmp auf einem Ho...
Die bidirektionale MySQL-Sicherung wird auch als ...
Heute zeige ich Ihnen einen Neon-Button-Animation...
Schauen Sie sich zuerst den Code an Code kopieren ...
MySQL ist eine leistungsstarke Open-Source-Datenb...
Vorwort Kürzlich wurde unser Server von Hackern a...
[LeetCode] 182.Doppelte E-Mails Schreiben Sie ein...
Effektbild (die Rahmenfarbe ist zu hell, setzen S...