sql >> Databáze >  >> RDS >> Mysql

MySQL rozděluje řetězec oddělený čárkami do dočasné tabulky

Toto je v podstatě stejná otázka jako Může Mysql rozdělit sloupec?

MySQL nemá funkci rozděleného řetězce, takže musíte něco obejít. Jakmile je rozdělíte, můžete s daty dělat cokoli pomocí jedné z metod uvedených na stránce odpovědí výše.

Tuto vlastní funkci můžete přepnout do smyčky a přerušit, když se vrátí prázdná, budete si muset zahrát a naučit se nějakou syntaxi (nebo alespoň já bych to udělal), ale syntaxe pro smyčku FOR v mysql je zde:http://www.roseindia.net/sql/mysql-example/for.shtml

Můžete to iterovat a zvyšovat pozici ve funkci níže:

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/ )

Což by mělo vrátit '', pokud nebude nalezena žádná shoda, takže přerušte smyčku, pokud nebude nalezena žádná shoda. To vám umožní analyzovat rozdělený řetězec pouze pomocí mysql a spustit dotazy vložení do dočasné tabulky. Ale proč pro takovou práci nepoužít skriptovací jazyk, jako je php? :(

Kód pro syntaxi smyčky:

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. Zkopírujte několik sloupců souboru csv do tabulky

  2. MySQL ERROR 1290 (HY000) --volba zabezpečený-soubor-priv

  3. Co mají Poker, Blackjack, Belot a Préférence společného s databázemi?

  4. Jak zjistit čas provádění dotazu v Oracle SQL Developer?