MySql为搜索过滤器准备sql语句

时间:2014-09-07 23:27:58

标签: mysql sql stored-procedures prepared-statement

我有一个Sql SP,它根据传递给SP的parms应用过滤器。 如果我只传递下面示例中的(2,4)有效值,它就可以工作。 但是如果没有传递过滤器,它应该返回所有行。 问题是检查 parmIndustryId为null或parmIndustryId为''空字符串,没有它可以工作,但我需要能够检查空字符串或null。

  

这是我得到的错误
  错误代码:1241。操作数应包含1   色谱柱0.000秒

CREATE  PROCEDURE `SearchIndustry`(
         IN  parmIndustryId TEXT     
    )
BEGIN
 SET parmIndustryId ='2,4';

 set @sql = CONCAT(' Select t1.*  
  FROM  Industry t1 
  WHERE Active =1 AND(', parmIndustryId ,' is null OR t2.IndustryId IN( ', parmIndustryId, ' ))')

    ;

PREPARE q FROM @sql;
execute q;

END$$
DELIMITER ;

如何正确传递IN操作数过滤器的值?

1 个答案:

答案 0 :(得分:1)

您可以使用FIND_IN_SET()

SELECT *
FROM Industry
WHERE Active = 1 
  AND (parmIndustryId IS NULL OR FIND_IN_SET(IndustryId, parmIndustryId))

编辑,如果可以传递空字符串,则可能还需要使用COALESCE。如果是这样,这将有效:

 SELECT *
 FROM Industry
 WHERE Active = 1 
    AND (COALESCE($parmIndustryId,'') = '' 
             OR FIND_IN_SET(IndustryId, $parmIndustryId));