首页  >  问答  >  正文

将标题重写为:将整数数组传递给MySQL存储过程

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

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粉275883973P粉275883973372 天前629

全部回复(2)我来回复

  • P粉590428357

    P粉5904283572023-11-04 09:16:19

    没有数组概念。所以你能做的可能就是这样

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

    1. 使用 , 作为分隔符拆分字符串,

    2. 将每个值插入临时表

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

    最后只需使用您的临时表即可

    回复
    0
  • P粉713866425

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

    回复
    0
  • 取消回复