Mysql

如何為mysql查詢編寫正確的數組字元串參數?

  • September 1, 2020

我試圖建立一個正確的字元串作為參數傳遞給一個簡單的查詢。

返回記錄的正確查詢:

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

…但如果我通過這個 (‘‘2020-08-01’,‘2020-08-01’,‘2020-08-02’,‘2020-08-03’,‘2020-08-04’’ ) 作為參數它不起作用。

我也試圖通過這個(‘2020-08-01,2020-08-01,2020-08-02,2020-08-03,2020-08-04’)

…但它也不起作用。

我的想法是通過一個過程把這個字元串作為參數。或許是這樣的:

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

任何參考或有用的建議將不勝感激。

編輯:基於來自@nbk 的非常有用的範例並在將其與數組進行比較之前更改日期格式,我設法提出了一個有效的查詢,就像一個魅力。您可以在下面看到它的所有榮耀。;O) 來自@nbk 的響應因此被視為解決方案。非常感謝@nbk。

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

使用find_in_Set

架構(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 ;       

查詢 #1

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

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

在 DB Fiddle 上查看

引用自:https://dba.stackexchange.com/questions/274696