sql >> Base de Datos >  >> RDS >> Mysql

¿Hay algo análogo a un método split() en mySql?

Desafortunadamente, mysql no permite que las funciones devuelvan matrices o tablas (que yo sepa), por lo que debe hacerlo un poco a la ligera.

Aquí hay un proceso almacenado de muestra:

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 ;

Esto tokenizará su cadena e insertará los valores en una tabla llamada "tokens", un token por fila. Debería poder modificarlo para hacer algo útil con bastante facilidad. Además, es posible que desee aumentar la longitud de entrada de 200.