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

MySQL Opdel kommasepareret streng i Temp-tabel

Dette er stort set det samme spørgsmål som Kan Mysql opdele en kolonne?

MySQL har ikke en split string-funktion, så du er nødt til at arbejde rundt. Du kan gøre hvad som helst med dataene, når du deler dem ved hjælp af en af ​​metoderne, der er angivet på svarsiden ovenfor.

Du kan sløjfe over den brugerdefinerede funktion og bryde, når den vender tilbage tom, du bliver nødt til at spille og lære noget syntaks (eller i det mindste ville jeg det), men syntaksen for en FOR-løkke i mysql er her:http://www.roseindia.net/sql/mysql-example/for.shtml

Du kan iterere over det og øge positionen i funktionen nedenfor:

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 skal returnere '', hvis der ikke findes noget match, så bryd løkken, hvis der ikke findes noget match. Dette vil tillade dig at med kun mysql parse over den delte streng og køre indsættelsesforespørgslerne ind i en midlertidig tabel. Men hvorfor ikke bare bruge et scriptsprog som php til den slags arbejde? :(

Kode til sløjfesyntaks:

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. Spring Batch - Kan ikke oprette metadatatabeller på Postgres og indlæse faktiske data til mysql

  2. Sådan opretter du en databasemodel fra bunden

  3. Eksport af Oracle Table til Excel-regneark

  4. Oracle SQL - max() med NULL-værdier