【发布时间】:2010-09-12 00:38:02
【问题描述】:
如果我搜索 LENA,我只想得到 LENA 是一个单词而不是 Lenason、Anna-Lena 或 Malena 等单词的一部分的结果
这样的查询怎么写,不行
"select * from users where name like '%LENA%'"
应该是什么?
【问题讨论】:
-
我看到你不接受我的回答;出了什么问题?
如果我搜索 LENA,我只想得到 LENA 是一个单词而不是 Lenason、Anna-Lena 或 Malena 等单词的一部分的结果
这样的查询怎么写,不行
"select * from users where name like '%LENA%'"
应该是什么?
【问题讨论】:
使用这个:
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+)'
【讨论】:
你可以使用REGEXP:
SELECT fields
FROM users
WHERE name REGEXP '(^|\s+)LENA($|\s+)'
【讨论】:
您最好查看Full Text Search。
否则我认为你会被困在做这样的事情
"select * from users WHERE CONCAT(' ',name, ' ') like '% LENA %'"
这将非常低效,因为它需要全表扫描。
【讨论】:
CONCAT 而不是 + 进行字符串连接。连接空格的原因是 lena 是第一个、最后一个或唯一一个单词的名称不会匹配 where 子句 name like '% LENA %' 没有这个。
zero characters 匹配。这是我的逻辑缺陷。