mySQL:模式匹配3或更多“;a';s";名义上

mySQL:模式匹配3或更多“;a';s";名义上,mysql,pattern-matching,Mysql,Pattern Matching,这是我正在使用的桌子 我试图“找到那些名字中有三个或更多a的国家” 这是我当前的代码 SELECT name FROM world WHERE name LIKE '%aaa%' 世界包含名称和大陆 我是否接近了?您最初的尝试将只匹配名称中有三个相邻as的国家。请尝试以下操作: SELECT name FROM world WHERE name LIKE '%a%a%a%' 字符a仅与字符a匹配(例如,区分大小写取决于表和服务器)。字符%将匹配任意数量的字符,任意次数。我的查询中的

这是我正在使用的桌子

我试图“找到那些名字中有三个或更多a的国家”

这是我当前的代码

SELECT name FROM world
  WHERE name LIKE '%aaa%'
世界
包含
名称
大陆


我是否接近了?

您最初的尝试将只匹配名称中有三个相邻
a
s的国家。请尝试以下操作:

SELECT name FROM world
  WHERE name LIKE '%a%a%a%'
字符
a
仅与字符
a
匹配(例如,区分大小写取决于表和服务器)。字符
%
将匹配任意数量的字符,任意次数。我的查询中的七个字符意味着最多有七个组。例如:

阿富汗
分为
A
fgh
A
nist
A
n

阿尔及利亚
分为
A
lgeri
A
,然后没有剩余的
A
要包含,因此它不作为匹配项包含


马达加斯加
可分为
Mad
a
g
a
sc
a
r
。请注意,第一个组包含一个
a
,因为
%
允许任何字符,包括
a
。(在这里,我假设模式匹配是贪婪的,这意味着它使捕获组尽可能大,这更喜欢较早的组而不是较晚的组。)

这是有效的,但我不明白为什么。我理解为什么一个国家有三个“a”是正确的,但这个代码如何包含问题的“或更多”部分?@ea87扩展了答案,解释了
%
将如何适用于三个国家,希望能说明这一点。精确匹配三个
a
s比匹配三个或更多
a
s要困难得多——最简单的方法是包括a,而不是排除四个或更多
a
s。