Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Dividir String Separada por Vírgulas em Tabela Temp


Esta é praticamente a mesma pergunta que O Mysql pode dividir uma coluna?

O MySQL não tem uma função de string dividida, então você tem que fazer soluções alternativas. Você pode fazer qualquer coisa com os dados depois de dividi-los usando um dos métodos listados na página de resposta acima.

Você pode fazer um loop sobre essa função personalizada e interromper quando ela retornar vazia, você terá que jogar e aprender alguma sintaxe (ou pelo menos eu aprenderia), mas a sintaxe para um loop FOR no mysql está aqui:http://www.roseindia.net/sql/mysql-example/for.shtml

Você pode iterar sobre ele, incrementando a posição na função abaixo:
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-split-string-function/ )

Que deve retornar '' se nenhuma correspondência for encontrada, então interrompa o loop se nenhuma correspondência for encontrada. Isso permitirá que você, com apenas o mysql, analise a string dividida e execute as consultas de inserção em uma tabela temporária. Mas cara, por que não usar uma linguagem de script como php para esse tipo de trabalho? :(

Código para sintaxe de loop:
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 $$