如何在多个LIKE查询中跳过空的LIKE运算符?

时间:2010-03-04 14:08:56

标签: mysql

如果其中一个类似的变量为空,我注意到我的查询行为不正确:

SELECT name 
FROM   employee 
WHERE  name LIKE '%a%' 
AND     color LIKE '%A%' 
AND     city LIKE '%b%' 
AND     country LIKE '%B%' 
AND     sport LIKE '%c%' 
AND     hobby LIKE '%C%' 

现在当a和A不为空时它可以工作但是当a,A和c不为空时,c部分不会被解雇,所以看起来好像?

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用IF()功能....

SELECT name 
  FROM employee 
 WHERE ( IF(LENGTH('%a') > 0, name LIKE '%a%' , 0)
    OR IF(LENGTH('%A') > 0, color LIKE '%A%', 0)
    OR IF(LENGTH('%b') > 0, city LIKE '%b%' , 0)
    OR IF(LENGTH('%B') > 0, country LIKE '%B%', 0) 
    OR IF(LENGTH('%c') > 0, sport LIKE '%c%' , 0)
    OR IF(LENGTH('%C') > 0, hobby LIKE '%C%' , 0) 
       )

sql查询的where子句正在从true/false逻辑中查找AND/OR结果。因此,您可以从true/false函数返回要测试的表达式,或测试结果或原始硬IF()值。

答案 1 :(得分:0)

我假设你想做一个过滤器,你只检查过滤器值是非空的值。在这种情况下,请检查变量中的无效值作为替代条件。

select name
from employee
where (@a is null or name like '%' + @a + '%')
   and (@b is null or color like '%' + @b + '%')
   ...
相关问题