我想建立一個儲存過程,它接收整數陣列和一些其他輸入,例如:
CREATE PROCEDURE test (field1 varchar(4), field2 varchar(4), array varchar (255))
在儲存過程中我想像這樣使用它:
... WHERE some_field IN (array) ...
問題是,透過這種方式,我只能得到與陣列中第一個整數相對應的行。
有什麼方法可以讓它工作(我也嘗試使用 FIND_IN_SET
但它的作用與 IN
完全相同)?
我為測試預存程序而進行的呼叫是 CALL test (12, 13, '1, 2, 3')
。
P粉5904283572023-11-04 09:16:19
沒有陣列概念。所以你能做的可能就是這樣
您的array
變數的值為'1, 2, 3'
作為字串
使用 ,
作為分隔符號拆分字串,
將每個值插入暫存表
所以你的臨時表會有1,2,3
最後只需使用您的臨時表即可
P粉7138664252023-11-04 00:46:05
FIND_IN_SET() 可以工作,但數字字串中不能有空格。
演示:
mysql> select find_in_set(2, '1, 2, 3'); +---------------------------+ | find_in_set(2, '1, 2, 3') | +---------------------------+ | 0 | +---------------------------+ mysql> select find_in_set(2, '1,2,3'); +-------------------------+ | find_in_set(2, '1,2,3') | +-------------------------+ | 2 | +-------------------------+
因此,您應該在將列表傳遞給過程之前形成不含空格的列表,或者在過程中使用 REPLACE() 去除空格。