Mysql
 sql >> Database >  >> RDS >> Mysql

C'è qualcosa di analogo a un metodo split() in mySql?

Sfortunatamente, mysql non consente alle funzioni di restituire array o tabelle (che conosco), quindi devi farlo in modo un po' complicato.

Ecco un esempio di procedura memorizzata:

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 ;

Questo tokenizzerà la tua stringa e inserirà i valori in una tabella chiamata "tokens", un token per riga. Dovresti essere in grado di modificarlo per fare qualcosa di utile abbastanza facilmente. Inoltre, potresti voler aumentare la lunghezza dell'input da 200.