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

Gibt es etwas Analoges zu einer split()-Methode in mySql?

Leider erlaubt mysql keine Funktionen, Arrays oder Tabellen zurückzugeben (soweit ich weiß), also müssen Sie dies etwas umständlich machen.

Hier ist ein Beispiel für eine gespeicherte Prozedur:

DELIMITER $$

create function splitter_count (str varchar(200), delim char(1)) returns int
  return (length(replace(str, delim, concat(delim, ' ')))  - length(str)) $$

CREATE PROCEDURE tokenize (str varchar(200), delim char(1))
BEGIN
  DECLARE i INT DEFAULT 0;
  create table tokens(val varchar(50));
  WHILE i <= splitter_count(str, delim) DO
    insert into tokens(val) select(substring_index(SUBSTRING_INDEX(str, delim, i+1), delim, -1));
    SET i = i + 1;
  END WHILE;

END $$

DELIMITER ;

Dadurch wird Ihre Zeichenfolge tokenisiert und die Werte in eine Tabelle namens "Tokens" eingefügt, ein Token pro Zeile. Sie sollten in der Lage sein, es zu ändern, um ziemlich einfach etwas Nützliches zu tun. Außerdem können Sie die Eingabelänge von 200 erhöhen.