【发布时间】:2014-11-27 11:02:50
【问题描述】:
我正在尝试创建一个 SQL 查询,该查询将为文本字段的自动完成提供值。一切正常,但是我似乎无法创建一个足以满足我想要的目的的 SQL 查询。我正在使用 MySQL。
如果搜索词中有空格(或多个空格),我只希望查询对最后一个空格之后的字符串部分进行LIKE比较。
例如,假设我在数据库中有两个可能的值:
- 螺栓
- 大螺栓
目前,如果用户键入“Bolt”然后是空格,则使用此查询返回以上两个值 -
SELECT name FROM items WHERE name LIKE 'SEARCH_TERM%'
我想要的是,如果用户键入“Bolt”然后输入一个空格,那么数据库中只会返回 Bolt。
实际上意味着只使用 LIKE 比较空格之后的搜索词的最后一部分,结果应该完全匹配,直到最后一个空格。
我也试过了:
SELECT name FROM items WHERE name LIKE 'SEARCH_TERM[a-z]%'
但实际上使用上述方案不会返回任何结果。
我所追求的可能吗?我也尝试过使用全文搜索进行探索,但对此一无所知。我相信在名称字段上启用了全文搜索,但是我对此的经验有限。下面的查询无效。
SELECT name FROM items WHERE MATCH(name) AGAINST('SEARCH_TERM')
任何建议或意见将不胜感激。
【问题讨论】:
-
什么版本的sql server?
-
MySQL 版本 5.6.21
-
两个记录都返回了?那一定不是。它应该返回 no 记录,因为“Bolt”和“Bolts Large”都不匹配“Bolt %”。你确定吗?见sqlfiddle.com/#!2/623f73/1。它按预期工作。
-
是的,我确定 - 请注意我的查询有 'Bolt%' 而不是 'Bolt%'
-
什么?你说他们输入 Bolt,然后输入一个空格。那么空间突然在哪里?