sql >> Databasteknik >  >> RDS >> Mysql

Finns det något som liknar en split()-metod i mySql?

Tyvärr låter mysql inte funktioner returnera arrayer eller tabeller (som jag känner till) så du måste göra detta lite hackigt.

Här är ett exempel på lagrad 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 ;

Detta kommer att tokenisera din sträng och infoga värdena i en tabell som heter "tokens", en token per rad. Du borde kunna modifiera den för att göra något användbart ganska enkelt. Du kanske också vill öka inmatningslängden från 200.



  1. SQL Server:Vad är skillnaden mellan CROSS JOIN och FULL OUTER JOIN?

  2. Hur castar man DATETIME som ett DATUM i mysql?

  3. Hur testar man om en MySQL-fråga lyckades ändra databastabelldata?

  4. Kan kommentarer hämma prestandan för lagrad procedur?