MYSQL - 类似于不使用特殊字符的语句

时间:2016-04-13 16:04:10

标签: mysql

我遇到以下问题:

在我的表格中,我有以下内容:

ID     Long    Latt    city 
1      n/a     n/a     Newcastle-upon-Tyne 
2      n/a     n/a     Newcastle Upon Tyne 
3      n/a     n/a     Stoke-on-Trent 
4      n/a     n/a     Stoke on Trent

如果有人进入搜索" Newcastle Upon Type"我希望他们两个都能表现出来。我的sql语句是:

select * from `properties` where `city` LIKE '%Newcastle Upon Tyne%'

但只有一个节目?但它是一个类似的声明," Newcastle-Upon-Tyne"和泰恩河上的纽卡斯尔相似 - 那么为什么在这种情况下只显示完全匹配?

2 个答案:

答案 0 :(得分:3)

LIKE比较仅针对那一行返回TRUE。

LIKE比较基本上等同于相等比较

SELECT 'ab d' =    'ab d'  --> TRUE
     , 'ab d' LIKE 'ab d'  --> TRUE

区别在于LIKE在右侧的值中支持两个通配符....百分号字符(%)和下划线字符({{1} })。 _字符匹配任何字符的零,一个或多个。 %字符匹配任何一个单个字符。

比较

的结果
_

对于城市的值

,这两个都会评估为真
 city LIKE 'Newcastle_Upon_Tyne'
 city LIKE 'Newcastle%Upon%Tyne'

此外,具有百分号的那个也将评估为城市值的TRUE,例如

'Newcastle-Upon-Tyne'
'Newcastle7Upon4Tyne'

如果你想要比LIKE comarison提供更精确的匹配,你可以改用正则表达式。

'NewcastleUpon56789Tyne'
'Newcastle FEE- UponFI Tyne'

对于城市值,这将返回TRUE

city REGEXP 'Newcastle[ -]Upon[ -]Tyne'

答案 1 :(得分:2)

因为空格不是通配符。空格就像任何其他字母一样。如果您这样做:

select * from `properties` where `city` LIKE '% %'

它将找到包含空格的所有记录。

如果您想要包含该顺序中的单词的任何记录,无论它们之间的字符如何,您都可以这样做:

select * from `properties` where `city` LIKE '%Newcastle%Upon%Tyne%'