sql >> Base de Datos >  >> RDS >> Mysql

MySQL divide una cadena separada por comas en una tabla temporal

Esta es prácticamente la misma pregunta que ¿Puede Mysql dividir una columna?

MySQL no tiene una función de cadena dividida, por lo que debe hacer otras cosas. Puede hacer cualquier cosa con los datos una vez que los divida utilizando uno de los métodos enumerados en la página de respuestas anterior.

Puede recorrer esa función personalizada y romper cuando vuelve vacía, tendrá que jugar y aprender algo de sintaxis (o al menos yo lo haría), pero la sintaxis para un bucle FOR en mysql está aquí:http://www.roseindia.net/sql/mysql-example/for.shtml

Puede iterar sobre él, incrementando la posición en la siguiente función:

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

(Crédito:https://blog.fedecarg.com /2009/02/22/mysql-función-dividir-cadena/ )

Que debería devolver '' si no se encuentra ninguna coincidencia, así que rompa el ciclo si no se encuentra ninguna coincidencia. Esto le permitirá analizar solo mysql sobre la cadena dividida y ejecutar las consultas de inserción en una tabla temporal. Pero hombre, ¿por qué no usar un lenguaje de secuencias de comandos como php para ese tipo de trabajo? :(

Código para la sintaxis del bucle:

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