Heim > Fragen und Antworten > Hauptteil
Ich möchte eine gespeicherte Prozedur erstellen, die ein Array von Ganzzahlen und einige andere Eingaben empfängt, wie zum Beispiel:
CREATE PROCEDURE test (field1 varchar(4), field2 varchar(4), array varchar (255))
In der gespeicherten Prozedur möchte ich es so verwenden:
... WHERE some_field IN (array) ...
Das Problem ist, dass ich auf diese Weise nur die Zeilen erhalte, die der ersten Ganzzahl im Array entsprechen.
Gibt es eine Möglichkeit, es zum Laufen zu bringen (ich habe auch versucht, FIND_IN_SET
但它的作用与 IN
genau so zu verwenden)?
Der Anruf, den ich getätigt habe, um die gespeicherte Prozedur zu testen, war 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() 去除空格。