如果我搜索LENA,我只想得到LENA是一个单词的结果,而不是像Lenason或Anna-Lena或Malena这样的单词的一部分
如何编写此类查询,而不是
"select * from users where name like '%LENA%'"
它应该是什么?
答案 0 :(得分:4)
使用这个:
select * from users where name like '% LENA %' OR name like 'LENA %' OR name like '% LENA' OR name like 'LENA'
试一试,它会起作用,并且在开始和结束时都有2个空格太简单了。 它冗长而快速的查询。你也可以使用全文搜索,Concat,Regex ......但对我来说,我喜欢简单,只需在%之前添加一些空格。
但是,您可以尝试更短但更慢的查询:
SELECT * FROM users WHERE name REGEXP '(^|\s+)LENA($|\s+)'
答案 1 :(得分:1)
您可以使用REGEXP
:
SELECT fields
FROM users
WHERE name REGEXP '(^|\s+)LENA($|\s+)'
答案 2 :(得分:1)
你可能最好还是考虑一下Full Text Search。
否则我认为你做了类似这样的事情
"select * from users WHERE CONCAT(' ',name, ' ') like '% LENA %'"
由于需要全表扫描,因此效率非常低。