Como escrever o parâmetro de string array correto para consulta mysql?
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
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