Dit is vrijwel dezelfde vraag als Kan Mysql een kolom splitsen?
MySQL heeft geen functie voor het splitsen van strings, dus je moet er omheen werken. U kunt alles doen met de gegevens als u deze eenmaal heeft gesplitst met een van de methoden die worden vermeld op de antwoordpagina hierboven.
Je kunt die aangepaste functie doorlopen en breken wanneer deze leeg terugkeert, je zult wat syntaxis moeten spelen en leren (of dat zou ik tenminste doen), maar de syntaxis voor een FOR-lus in mysql is hier:http://www.roseindia.net/sql/mysql-example/for.shtml
U kunt eroverheen herhalen en de positie in de onderstaande functie verhogen:
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, '');
(Credit:https://blog.fedecarg.com /2009/02/22/mysql-split-string-function/ )
Die zou '' moeten retourneren als er geen overeenkomst wordt gevonden, dus verbreek de lus als er geen overeenkomst wordt gevonden. Hierdoor kunt u met alleen mysql de gesplitste tekenreeks ontleden en de invoegquery's in een tijdelijke tabel uitvoeren. Maar man, waarom niet gewoon een scripttaal zoals php gebruiken voor dat soort werk? :(
Code voor lus-syntaxis:
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 $$