我正在观看这个mysql课程,其中给出了以下示例:
SELECT Name, Continent, Population FROM Country WHERE Name LIKE '_%a' ORDER BY Name;
他们说'_a%'
会匹配Name
列中第二个字符为a
的所有字符串。我在Ubuntu上使用MariaDB服务器10.0.34,在我的例子中,结果完全不同。相反,它会显示Name
列中以a
结尾的所有字符串。知道为什么会这样,存在差异吗?
感谢。
答案 0 :(得分:0)
嗯。几点。
1)那些不是正则表达式,那些是LIKE比较。 (是的,是的,to-may-toh,tah-mah-toh,我知道。)但我们可以在我们的术语中精确,并避免混淆和混淆。
2)'_%a'
和'_a%'
显着不同,正如您自己的观察所揭示的那样
_
下划线匹配任何一个字符%
百分比匹配零,一个或多个任何字符a
匹配字符'a'
所以
LIKE '_a%'
匹配任何单个字符,后跟“a”,后跟任意数量的(零个,一个或多个)字符
LIKE '_%a'
匹配任何单个字符,后跟任意数量的(零个,一个或多个)任何字符,并以'a'结尾
作为示范:
SELECT 'name' LIKE '_a%' -- true - at least two chars, second char is a
, 'name' LIKE '_%a' -- false - at least two chars, last char is a
, 'name' LIKE '_e%' -- false - at least two chars, second char is e
, 'name' LIKE '_%e' -- true - at least two chars, last char is e
这些是LIKE
比较。要使用正则表达式执行等效操作,请执行以下操作:
SELECT 'name' REGEXP '^.a' -- at least two chars, second char is a
, 'name' REGEXP '^..*a$' -- at least two chars, last char is a
, 'name' RLIKE '^.e' -- at least two chars, second char is e
, 'name' RLIKE '^..*e$' -- at least two chars, last char is e