我的数据库包含空格。例如“拉斯维加斯”。在我的mysql中,我正在使用匹配进行搜索。
select * where match(city) against ("LASVEGAS")
它没有返回任何行,因为它在没有空格的数据库中搜索。任何人都可以帮我做搜索,包括空格。
答案 0 :(得分:1)
您可以使用replace
删除查询中的空格
select * from cityTable where replace(city," ","")="LASVEGAS"
您可以阅读有关replace
函数here的更多信息!
修改:匹配是必需的
由于匹配是必需的,因为你不能使用替换内部匹配,我建议在这里中途。 (我的真正建议是不要在列上使用fulltext
- 索引match
和against
,就像城市列一样简单,但有时候你的要求会迫使你做出奇怪的解决方案)< / p>
通过在普通城市列旁边创建一个“搜索友好”城市列(fulltext
索引支持),删除所有空格和短划线,您可以尝试解决此问题。
| City | CitySearch |
|===============|==============|
| Las Vegas | LasVegas |
| San Francisco | SanFrancisco |
| Saint-Quentin | SaintQuentin |
稍后进行搜索时,您可以使用match
列上的against
和CitySearch
进行搜索。当用户键入您要搜索的城市名称时,首先必须以清除City
列的方式清除它。现在,如果用户写“Las Vegas”,“Las-Vegas”或“LasVegas”并不重要,因为在清除用户数据后,您最终会使用“LasVegas”来搜索CitySearch
列。
sql查询将是:
select * from cityTable where match(CitySearch) against ("LasVegas")
我希望这符合您的要求
答案 1 :(得分:0)
假设您从外部应用程序中提取搜索词,我认为您可以很容易地转换为正则表达式检查。
SELECT *
FROM table t
WHERE t.city REGEX 'L\s?A\s?S\s?V\s?E\s?G\s?A\s?S';
这将从您的表中提取任何版本的LASVEGAS,包括插入的空格。每个人都在这?表示可选的空格。我不是REGEX专家,但这里是mysql docs链接。 http://dev.mysql.com/doc/refman/5.1/en/regexp.html