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