MYSQL - 使用逗号分隔字符串作为变量输入的存储过程

mmk*_*mkd 7 mysql stored-procedures

我希望有人能够提供帮助.我已经创建了我的第一个存储过程(没有任何幻想)但是我遇到了一个问题.

我想给它一个字符串输入,如1,2,3,4,5然后它做一个简单的 SELECT * FROM [TABLE] WHERE EAN IN (VAR);

所以存储的proc看起来像这样:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE PROCEDURE `moments`.`new_procedure`(IN var1 VARCHAR(255))
BEGIN

SELECT * FROM moments.PRODUCT WHERE EAN IN (var1);

END
Run Code Online (Sandbox Code Playgroud)

我正试图像这样执行它:

作品

call moments.new_procedure('5045318357397')
Run Code Online (Sandbox Code Playgroud)

不起作用

call moments.new_procedure('5045318357397,5045318357427');
Run Code Online (Sandbox Code Playgroud)

这会执行但不会带回任何结果.它是否将第二个语句分类为字符串,所以它这样做:

select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
Run Code Online (Sandbox Code Playgroud)

而不是这个:

select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
Run Code Online (Sandbox Code Playgroud)

如何在执行查询中格式化输入以使其以逗号分隔的字符串作为输入?

ano*_*ery 15

你可以使用:

SELECT * FROM moments.PRODUCT 
WHERE FIND_IN_SET(EAN, var1)
Run Code Online (Sandbox Code Playgroud)

假设它实际上以逗号分隔,这应该工作.在这种情况下,任何其他分隔都不起作用.

  • 这是有效的,但它不是非常有效,因为它需要从表中获取所有行,然后将每行与您的集进行比较,这反过来也必须循环逗号分隔列表以检查它是否匹配...如果您的#列很低,那就没关系,否则你应该找到一种击球方式 (2认同)