我想创建一个接收整数数组和其他一些输入的存储过程,例如:

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

最佳答案

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()去掉空格。

09-11 13:30
查看更多