删除与搜索匹配的空格

时间:2013-08-27 16:09:17

标签: mysql

我的数据库包含空格。例如“拉斯维加斯”。在我的mysql中,我正在使用匹配进行搜索。

select * where match(city) against ("LASVEGAS") 

它没有返回任何行,因为它在没有空格的数据库中搜索。任何人都可以帮我做搜索,包括空格。

2 个答案:

答案 0 :(得分:1)

您可以使用replace删除查询中的空格

select * from cityTable where replace(city," ","")="LASVEGAS"

您可以阅读有关replace函数here的更多信息!

修改:匹配是必需的

由于匹配是必需的,因为你不能使用替换内部匹配,我建议在这里中途。 (我的真正建议是不要在列上使用fulltext - 索引matchagainst,就像城市列一样简单,但有时候你的要求会迫使你做出奇怪的解决方案)< / p>

通过在普通城市列旁边创建一个“搜索友好”城市列(fulltext索引支持),删除所有空格和短划线,您可以尝试解决此问题。

|     City      |  CitySearch  |
|===============|==============|
|   Las Vegas   |   LasVegas   |
| San Francisco | SanFrancisco |
| Saint-Quentin | SaintQuentin |

稍后进行搜索时,您可以使用match列上的againstCitySearch进行搜索。当用户键入您要搜索的城市名称时,首先必须以清除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