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

Er der noget, der ligner en split()-metode i mySql?

Desværre lader mysql ikke funktioner returnere arrays eller tabeller (som jeg kender til), så du er nødt til at gøre dette lidt hacket.

Her er et eksempel på lagret proc:

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 ;

Dette vil tokenisere din streng og indsætte værdierne i en tabel kaldet "tokens", et token pr. række. Du burde være i stand til at ændre det til at gøre noget nyttigt ret nemt. Det kan også være, du ønsker at øge inputlængden fra 200.



  1. Hvorfor intet output, når PLSQL Anonymous-blok er fuldført?

  2. solplet solr udefineret felttype

  3. Bash:Hvordan kalder man kommandoen og gemmer resultatet i en variabel?

  4. PostgreSQL-streamingreplikering - et dybt dyk