Come scrivere il parametro della stringa di array corretto per la query mysql?

Aug 31 2020

Sto cercando di inserire una stringa corretta da passare come parametro a una semplice query.

Query corretta che restituisce record:

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

... ma se passo questo ('' 2020-08-01 ',' 2020-08-01 ',' 2020-08-02 ',' 2020-08-03 ',' 2020-08-04 '' ) come parametro non funziona.

Ho anche provato a passare questo ('2020-08-01,2020-08-01,2020-08-02,2020-08-03,2020-08-04')

... ma anche non funziona.

La mia idea è di inserire questa stringa come parametro attraverso una procedura. Forse in questo modo:

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

qualsiasi riferimento o consiglio utile sarebbe apprezzato.

EDIT: Sulla base di un esempio molto utile da @nbk e cambiando il formato della data prima di confrontarlo con un array, sono riuscito a mettere una query valida che funziona come un fascino. Puoi vederlo qui sotto in tutto il suo splendore. ; O) La risposta di @nbk è quindi considerata una soluzione. Grazie mille @nbk.

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

Risposte

1 nbk Aug 31 2020 at 13:08

Usa find_in_Set

Schema (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 ;       

Domanda n. 1

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

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

Visualizza su DB Fiddle