当前位置: 首页 > 面试题库 >

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

宁良平
2023-03-14
问题内容

我希望有人能够提供帮助。我创建了我的第一个存储过程(没什么花哨的),但是我遇到了问题。

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

因此,存储的过程如下所示:

– 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
我正在尝试像这样执行它:

作品

call moments.new_procedure('5045318357397')

不起作用

call moments.new_procedure('5045318357397,5045318357427');

这会执行,但不会带来任何结果。是否将第二条语句归类为字符串,以便执行此操作:

html" target="_blank">select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')

而不是这样:

select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')

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


问题答案:

您可以使用:

SELECT * FROM moments.PRODUCT 
WHERE FIND_IN_SET(EAN, var1)

假设它实际上是逗号分隔的,这应该可以工作。在这种情况下,任何其他定界将不起作用。



 类似资料:
  • 问题内容: 如何将逗号分隔的字符串拆分为存储过程中的字符串,并将其插入表字段中? 使用Firebird 2.5 问题答案: 这里有一个示例如何分割字符串并将子字符串写入表中:

  • 问题内容: 如果用户定义的变量是一串用逗号分隔的数字,例如,是否可以在函数中使用它? 具体来说: 不选择t等于c等于1或2或4的行。 问题答案: 您不能直接使用变量来执行此操作。根据您现在拥有的内容,服务器正在尝试执行…显然,这不是您想要的,因为您要检查c是否包含给定的单个字符串。 您必须根据列表生成动态SQL,以使其正常工作。

  • 问题内容: 我想编写一个对表执行选择操作的存储过程,并且需要一个类型为type的输入变量。 我想发送一堆以输入参数分隔的值,例如 然后获取包含这些名称之一的行。 在SQL中,代码将是 现在我想在我的C#应用​​程序中有一个变量,说出strNames并像这样填充它 并将此变量发送到SP并执行它。就像是 但是 如何告诉SQL Server运行这样的命令? 我需要做到这一点,我知道这是可能的,请给我提示

  • 问题内容: 我有一个。所选(选中)的项目存储在中。 例如,选择的值超过7天 我正在转换为以逗号分隔的,即 现在,我将此值作为字符串传递给存储过程。我想触发查询,如: 我的问题是:如何在存储过程中分离字符串? 问题答案: 如果传递逗号分隔(任何分隔符)的字符串来存储过程并在查询中使用,那么必须吐出该字符串,然后才能使用它。 下面有例子:

  • 问题内容: 当我有1、2、3等字符串列表时,我想将此列用作一列 是否可以通过sql查询? 例如) <-我知道这不起作用。 问题答案: 使用任意数字的子查询来分割您的字符串。您可以使用‘1,2,3’代替vals。 看到它正常工作

  • 问题内容: 我有以下表格: 过滤器 使用者 我想运行以下选择 我想收到 但是我什么也没收到。 问题在于该字段是文本,因此“ in select”返回的内容类似于“ 1、2、3”(带有分号),因此 in 找不到任何值。 是否可以进行强制转换或将字符串更改为数组的选项? 问题答案: 最好规范化您的架构,不要以逗号分隔列表的形式存储关系,而是为此创建一个联结表,以维护用户和过滤器之间的 m:m 多对多关