将整数数组传递给mysql过程

时间:2014-04-07 17:45:42

标签: mysql sql arrays stored-procedures integer

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

没有数组概念。所以你可以做的就像是

您的array变量的值为'1, 2, 3'为字符串

  1. ,的字符串拆分为

  2. 的分隔符
  3. 将每个值插入临时表

  4. 所以你的临时表将有1,2,3

    最后只需使用你的临时表

     WHERE some_field IN (select array_id from temp_table)