Saltar al contenido

Cómo dividir texto separado por comas en el procedimiento almacenado de MySQL

Recuerda que en las ciencias un problema suele tener varias resoluciones, no obstante compartiremos lo más óptimo y mejor.

Solución:

Esto es muy simple para MySQL:

SELECT * FROM table WHERE FIND_IN_SET(table.id, commaSeparatedData);

Referencia: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

Podría usar una declaración preparada dentro del procedimiento almacenado para lograr esto. Puede crear la consulta de selección completa como un string dentro de una variable y luego concatenar en la coma delimitada string en su cláusula IN. Luego puede hacer una declaración preparada de la consulta string variable y ejecutarlo.

DELIMITER ;;
create procedure testProc(in listString varchar(255))

BEGIN

set @query = concat('select * from testTable where id in (',listString,');');
prepare sql_query from @query;
execute sql_query;

END
;;

DELIMITER ;

call testProc("1,2,3");

Podrías probar este ejemplo de MySql. Antes de usarlo, coloque algunas verificaciones de seguridad de tipo allí (es decir, verifique que la identificación sea un número entero o que coincida con la expresión regular antes de insertar).

 # BEGIN split statements ids
 DECLARE current_pos INT DEFAULT 1;
 DECLARE delim CHAR DEFAULT ',';
 DECLARE current CHAR DEFAULT '';
 DECLARE current_id VARCHAR(100) DEFAULT '';;
 CREATE TEMPORARY TABLE ids (`id` VARCHAR(100));
 split_ids: LOOP
  SET current = MID(statement_ids, current_pos, 1);
  IF (current_pos = LENGTH(statement_ids)) THEN
   IF current != delim THEN SET current_id = CONCAT(current_id,current); END IF;
   INSERT INTO ids(id) VALUES (current_id);
   LEAVE split_ids;
  END IF;
  IF current = delim THEN
   INSERT INTO ids(id) VALUES (current_id);
   SET current_id = '';
  ELSE
   SET current_id = CONCAT(current_id,current);
  END IF;
  SET current_pos = current_pos+1;
 END LOOP split_ids;
 # END split statement ids

 # to check ids are correct
 SELECT * FROM ids;

 # to use the ids:
 SELECT * FROM statements WHERE id IN (SELECT id FROM ids);

Recuerda mostrar este tutorial si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *