我想创建一个存储过程,它接收整数数组和一些其他输入,例如:
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() 去除空格。