sql >> Database >  >> RDS >> Mysql

MySQL Split door komma's gescheiden string in temp-tabel

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 $$


  1. Functie om het aantal weekdagen tussen twee datums te krijgen, exclusief feestdagen

  2. Opgeslagen procedure aanroepen met tabelwaardeparameter uit java

  3. Alternatief uitvoerformaat voor psql

  4. ORACLE 11g standaard ongevoelig voor hoofdletters