我正在尝试创建一个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')
非常感谢任何建议或要点。
答案 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'), '%')