我有包含空格的值的数据库。例如“拉斯维加斯”。在我的 mysql 中,我正在使用 match 进行搜索。
select * where match(city) against ("LASVEGAS")
它没有返回任何行,因为它在没有空格的数据库中搜索。谁能帮我做搜索,包括空格。
我有包含空格的值的数据库。例如“拉斯维加斯”。在我的 mysql 中,我正在使用 match 进行搜索。
select * where match(city) against ("LASVEGAS")
它没有返回任何行,因为它在没有空格的数据库中搜索。谁能帮我做搜索,包括空格。
您可以使用replace
删除查询中的空格
select * from cityTable where replace(city," ","")="LASVEGAS"
您可以在此处阅读有关该replace
功能的更多信息!
编辑:匹配是必需的
由于 match 是必需的,并且由于您不能在 match 内部使用 replace ,因此我在这里建议采用中间方法。(我真正的建议是不要在像城市列这样简单的列上使用fulltext
-index,match
但有时您的要求会迫使您做出奇怪的解决方案)against
通过在普通城市列旁边创建一个“搜索友好”城市列(具有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")
我希望这将在您的要求范围内
假设您从外部应用程序中提取搜索词,我认为您可以很容易地转换为正则表达式检查。
SELECT *
FROM table t
WHERE t.city REGEX 'L\s?A\s?S\s?V\s?E\s?G\s?A\s?S';
这将从您的表中提取任何版本的 LASVEGAS,包括插入的空格。这里每个 \s? 表示一个可选的空格。我不是 REGEX 专家,但这里是 mysql 文档链接。 http://dev.mysql.com/doc/refman/5.1/en/regexp.html