sql >> Database >  >> RDS >> Mysql

Is er iets analoog aan een split()-methode in mySql?

Helaas laat mysql functies geen arrays of tabellen retourneren (die ik ken), dus je moet dit een beetje hacky doen.

Hier is een voorbeeld van een opgeslagen proces:

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 ;

Dit zal uw tekenreeks tokeniseren en de waarden invoegen in een tabel met de naam "tokens", één token per rij. Je zou het moeten kunnen aanpassen om vrij gemakkelijk iets nuttigs te doen. U kunt ook de invoerlengte verhogen van 200.



  1. SQL NVARCHAR- en VARCHAR-limieten

  2. Wat is een opgeslagen procedure?

  3. Android Room - Lijst met objecten in een object verwerken en resultaten opvragen

  4. Hoe JSON-gegevens op te slaan in MySQL