SQL文本搜索 - 在空格之前确定,在搜索项之后LIKE

时间:2014-11-27 11:02:51

标签: mysql sql

我正在尝试创建一个SQL查询,该查询将为文本字段的自动完成提供值。一切正常,但我似乎无法创建一个SQL查询,这足以满足我的目的。我正在使用MySQL。

如果搜索词中有空格(或多个空格),我只希望查询在最后一个空格后对字符串部分进行LIKE比较。

例如,假设我在数据库中有两个可能的值:

  • 螺栓
  • Bolts Large

目前,如果用户输入“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')

非常感谢任何建议或要点。

3 个答案:

答案 0 :(得分:1)

查询

SELECT name FROM items WHERE name LIKE 'Bolt %'

不会返回任何记录,因为'Bolt'和'Bolts Large'都不匹配'Bolt%'。

SELECT name FROM items WHERE name LIKE 'Bolt%'

返回两个记录,因为'Bolt'和'Bolts Large'都匹配'Bolt%'。

要查找“Bolt”而不是“Bolts”,您必须为搜索字符串和列字符串添加空格:

 SELECT name FROM items WHERE concat(name, ' ') LIKE 'Bolt %'

返回'Bolt'但不是'Bolts Large'。

答案 1 :(得分:0)

SELECT name FROM items WHERE REPLACE(name, ' ', '') LIKE 'SEARCH_TERM%'

答案 2 :(得分:0)

你也可以使用CONCAT和TRIM,或者只是修剪

SELECT name FROM items WHERE name LIKE TRIM('SEARCH_TERM')

or your choice

SELECT name FROM items WHERE name LIKE CONCAT(TRIM('SEARCH_TERM'), '%')
SELECT name FROM items WHERE name LIKE CONCAT('%',TRIM('SEARCH_TERM'))
SELECT name FROM items WHERE name LIKE CONCAT('%',TRIM('SEARCH_TERM'), '%')