Como escrever o parâmetro de string array correto para consulta mysql?

Aug 31 2020

Estou tentando colocar uma string correta para passar como um parâmetro para uma consulta simples.

Consulta correta que retorna registros:

SELECT id_s FROM group_of_id_s
WHERE date IN ('2020-08-01','2020-08-01','2020-08-02','2020-08-03','2020-08-04');

... mas se eu passar neste ('' 2020-08-01 ',' 2020-08-01 ',' 2020-08-02 ',' 2020-08-03 ',' 2020-08-04 '' ) como parâmetro não funciona.

Eu também tentei passar ('2020-08-01,2020-08-01,2020-08-02,2020-08-03,2020-08-04')

... mas também não funciona.

Minha ideia é colocar essa string como parâmetro em uma procedure. Talvez assim:

IN parameter TEXT

BEGIN

SET @c = CONCAT('SELECT id_s FROM group_of_id_s
WHERE date IN (', '''' , parameter, '''', ')');

PREPARE stmt from @c;
EXECUTE stmt;

END

qualquer referência ou conselho útil seria apreciado.

EDIT: Com base em um exemplo muito útil de @nbk e alterando o formato de data antes de compará-lo a um array, consegui colocar uma consulta válida que funciona perfeitamente. Você pode ver abaixo em toda a sua glória. ; O) A resposta de @nbk é, portanto, considerada uma solução. Muito obrigado @nbk.

SELECT id_s FROM group_of_id_s
WHERE find_in_set(DATE_FORMAT(`date`, '%Y-%m-%d'), parameter) > 0;

Respostas

1 nbk Aug 31 2020 at 13:08

Use find_in_Set

Esquema (MySQL v5.7)

CREATE TABLE group_of_id_s (id_s int ,`date`date);

INSERT INTO group_of_id_s VALUES(1,'2020-08-01'),(2,'2020-07-01');


delimiter //
CREATE PROCEDURE myproc (IN parameter TEXT)
       BEGIN
         SELECT id_s FROM group_of_id_s
         WHERE find_in_set(`date`, parameter) > 0;
       END//
delimiter ;       

Consulta # 1

CALL myproc("2020-08-01,2020-08-01,2020-08-02,2020-08-03,2020-08-04");

| id_s |
| ---- |
| 1    |

Ver no DB Fiddle