在where子句中的MySql if语句

时间:2015-04-22 09:02:58

标签: mysql

我的代码无效

SELECT DISTINCT CONCAT(u.firstname, ' ', u.lastname) AS fnameLname, s.student_number, u.user_id
FROM user u
LEFT OUTER JOIN student s ON u.user_id = s.user_id
WHERE 
case when @filter != ''
then ((u.firstname REGEXP CONCAT('^[', @filter, ']') OR u.lastname REGEXP CONCAT('^[', @filter, ']')) OR student_number REGEXP CONCAT('^[', @filter, ']'))
else 1=1 
AND (u.user_type_id = 0)
ORDER BY u.lastname, u.firstname

我想从表 user 中选择用户,我已经实现了搜索字段(用于搜索student_number或在firstname和lastname的开头(只是名字或姓氏的第一个字母))。

例如,如果我搜索“j s”,它将匹配例如John Smith,而不是John Moses。它也会与Jeremy Sassone相匹敌。 @filter是asp.net中的控制参数。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用andor。不需要复杂的case when和内部case when等等:

where ( ( @filter != '%'
          and ( u.firstname REGEXP CONCAT('^[', @filter, ']')
                or u.lastname REGEXP CONCAT('^[', @filter, ']')
                or student_number REGEXP CONCAT('^[', @filter, ']')
             )
       )
       or @filter = '%'
      )
and   u.user_type_id = 0

@filter的默认值为'%' - 对于空字符串,由于空方括号,它的语法错误。