将标题重写为:将整数数组传递给MySQL存储过程
P粉275883973
P粉275883973 2023-11-03 10:46:21
0
2
663

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

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粉275883973
P粉275883973

全部回复(2)
P粉590428357

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

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

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

  2. 将每个值插入临时表

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

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

P粉713866425

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板