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

MySQL divide la stringa separata da virgole in una tabella temporanea

Questa è più o meno la stessa domanda di Mysql può dividere una colonna?

MySQL non ha una funzione di stringa divisa, quindi devi aggirare il problema. Puoi fare qualsiasi cosa con i dati dopo averli divisi utilizzando uno dei metodi elencati nella pagina delle risposte sopra.

Puoi eseguire il loop su quella funzione personalizzata e interromperla quando ritorna vuota, dovrai giocare e imparare un po' di sintassi (o almeno lo farei) ma la sintassi per un ciclo FOR in mysql è qui:http://www.roseindia.net/sql/mysql-example/for.shtml

Puoi scorrere su di esso, incrementando la posizione nella funzione seguente:

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, '');

(Credito:https://blog.fedecarg.com /22/02/2009/funzione-stringa-divisa-mysql/ )

Che dovrebbe restituire '' se non viene trovata alcuna corrispondenza, quindi interrompi il ciclo se non viene trovata alcuna corrispondenza. Ciò ti consentirà di analizzare solo mysql sulla stringa divisa ed eseguire le query di inserimento in una tabella temporanea. Ma perché non usare un linguaggio di scripting come php per quel tipo di lavoro? :(

Codice per la sintassi del ciclo:

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 $$