Logo
You
Code

split o explode con MySql

Autor YouCode - http://www.youcode.com.ar/mysql/split-o-explode-con-mysql-409

Como hacer un SPLIT o EXPLODE en MySql , simple DO WHILE REPLACE para sacar cada fragmento de un string

Supongamos que enviamos a un procedimiento almacenado un "dato" que necesitamos separar por su caracter separador, por ej:

Enviamos al SP un parametro con una data asi  "12,15,18,200,65,89" y esto por ejmplo representaria codigos de ....articulos que el usuario selecciono en una lista, claro....no seria muy bonito hacer tantos querys desde la aplicacion como codigos de articulos seleccionamos, entonces se nos ocurre hacer una concatenacion de todos los articulos y mandamos eso, ahora, en el SP debemos separar uno a uno esos codigos para hacer su tratamiento, entonces, hariamos algo asi:

Sabiendo que:
ArrCodigos es el armado que el usuario hizo en la aplicacion y quedaria asi "12,15,18,200,65,89" y se envia al SP en un parametro.

ahora, empezemos a "desmembrar" esto, como no existe el split o explode ..... a pensar se a dicho...., yo se los adelanto..
Atencion! , la variable o parametro del SP (ArrCodigos) debe ser varchar(200) , si necesitan mas.....bueno.....ponen lo que necesiten.
 
declare contador integer default 0;
declare cantcodigos integer default 0;
declare IdArticulo integer default 0;

#Primeramente miro o cuento cuantas comas ',' hay en la cadena asi se cuantas vueltas dar.
SELECT LENGTH(ArrCodigos) - LENGTH(REPLACE(ArrCodigos, ',', '')) into cantcodigos;

#Ahora que se cuantas comas ',' hay que separan cada codigo, hago el while para recorrer e ir sacando cada codigo del string.

WHILE contador  <= cantcodigos DO
                
        #Separo cada numero de codigo pero en la primera vuelta (contador=0) saco el
        #primer codigo hasta la primer como ','

        if contador=0 then
           set IdArticulo=CAST(SUBSTRING_INDEX(ArrCodigos,',',1) as unsigned);            	
        else 
          #Ya que pasamos la primer vuelta, voy achicando el ArrCodigos asi siempre
          #Saco los primeros digitos hasta la primer coma, es como si saco y achico, saco y
          #achico.......
          set ArrCodigos=REPLACE(ArrCodigos,CONCAT(SUBSTRING_INDEX(ArrCodigos,',',1),','),"");
          set IdArticulo=CAST(SUBSTRING_INDEX(ArrCodigos,',',1) as unsigned);
        end if;
               
        set contador=contador+1;
        
        #Aqui comenzaria el codigo de ustedes, sabiendo que en la variable IdArticulo esta quedando
        #cada codigo que se va tomando de la variable o parametro Arrcodigos

END WHILE;

tanto contador,cantcodigos,IdArticulo son variables declaradas de tipo integer.
http://www.youcode.com.ar/mysql/split-o-explode-con-mysql-409