Das ist so ziemlich die gleiche Frage wie Kann Mysql eine Spalte teilen?
MySQL hat keine Split-String-Funktion, also müssen Sie Workarounds durchführen. Sie können mit den Daten alles machen, nachdem Sie sie mit einer der oben auf der Antwortseite aufgeführten Methoden aufgeteilt haben.
Sie können diese benutzerdefinierte Funktion durchlaufen und abbrechen, wenn sie leer zurückkehrt, Sie müssen etwas Syntax spielen und lernen (zumindest würde ich das tun), aber die Syntax für eine FOR-Schleife in MySQL ist hier:http://www.roseindia.net/sql/mysql-example/for.shtml
Sie können darüber iterieren und die Position in der folgenden Funktion erhöhen:
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
(Bildnachweis:https://blog.fedecarg.com /2009/02/22/mysql-split-string-function/ )
Was '' zurückgeben sollte, wenn keine Übereinstimmung gefunden wird, also unterbrechen Sie die Schleife, wenn keine Übereinstimmung gefunden wird. Auf diese Weise können Sie nur mit mysql die geteilte Zeichenfolge analysieren und die Einfügeabfragen in eine temporäre Tabelle ausführen. Aber Mann, warum nicht einfach eine Skriptsprache wie PHP für diese Art von Arbeit verwenden? :(
Code für Schleifensyntax:
DELIMITER $$
CREATE PROCEDURE ABC(fullstr)
BEGIN
DECLARE a INT Default 0 ;
DECLARE str VARCHAR(255);
simple_loop: LOOP
SET a=a+1;
SET str=SPLIT_STR(fullstr,"|",a);
IF str='' THEN
LEAVE simple_loop;
END IF;
#Do Inserts into temp table here with str going into the row
insert into my_temp_table values (str);
END LOOP simple_loop;
END $$