Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL spaltet kommaseparierte Zeichenfolge in temporäre Tabelle auf

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