我遇到以下问题:
在我的表格中,我有以下内容:
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"和泰恩河上的纽卡斯尔相似 - 那么为什么在这种情况下只显示完全匹配?
答案 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%'