我的代码无效
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中的控制参数。
有人可以帮助我吗?
答案 0 :(得分:1)
您可以使用and
和or
。不需要复杂的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的默认值为'%' - 对于空字符串,由于空方括号,它的语法错误。