Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe algo análogo a um método split() no mySql?


Infelizmente, o mysql não permite que as funções retornem arrays ou tabelas (que eu saiba), então você tem que fazer isso um pouco hacky.

Aqui está um exemplo de proc armazenado:
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 ;

Isso tokenizará sua string e inserirá os valores em uma tabela chamada "tokens", um token por linha. Você deve ser capaz de modificá-lo para fazer algo útil com bastante facilidade. Além disso, você pode querer aumentar o comprimento de entrada de 200.