sql >> Databasteknik >  >> RDS >> Mysql

MySQL dela upp kommaseparerad sträng i temperaturtabell

Det här är ungefär samma fråga som Kan Mysql dela en kolumn?

MySQL har ingen split string-funktion så du måste göra omvägar. Du kan göra vad som helst med informationen när du delar upp den med någon av metoderna som anges på svarssidan ovan.

Du kan loopa över den anpassade funktionen och bryta när den återgår tom, du måste spela och lära dig lite syntax (eller åtminstone jag skulle göra det) men syntaxen för en FOR-loop i mysql är här:http://www.roseindia.net/sql/mysql-example/for.shtml

Du kan iterera över det och öka positionen i funktionen nedan:

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

(Kredit:https://blog.fedecarg.com /2009/02/22/mysql-split-string-function/ )

Som ska returnera '' om ingen matchning hittas, så bryt slingan om ingen matchning hittas. Detta gör att du med endast mysql kan analysera den delade strängen och köra infogningsfrågorna i en temporär tabell. Men varför inte bara använda ett skriptspråk som php för den typen av arbete? :(

Kod för loopsyntax:

DELIMITER $$  

CREATE PROCEDURE ABC(fullstr)

   BEGIN
      DECLARE a INT Default 0 ;
      DECLARE str VARCHAR(255);
      simple_loop: LOOP
         SET a=a+1;
         SET str=SPLIT_STR(fullstr,"|",a);
         IF str='' THEN
            LEAVE simple_loop;
         END IF;
         #Do Inserts into temp table here with str going into the row
         insert into my_temp_table values (str);
   END LOOP simple_loop;
END $$


  1. Använda Microsoft Access med Power BI

  2. MySQL GÅ MED endast den senaste raden?

  3. En fastighetsbyrådatamodell

  4. Skapa revisionstriggers i SQL Server