操作符LIKE与通配符
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE name LIKE '张%'
ORDER BY hp_max DESC
结果:
MySQL的正则表达式
基本字符匹配
.
匹配任意字符
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE hp_start REGEXP '.35'
ORDER BY hp_max DESC
结果:
OR匹配
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE hp_start REGEXP '355|345'
ORDER BY hp_max DESC
结果:
匹配几个字符之一
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE hp_growth REGEXP '[32]1'
ORDER BY hp_max DESC
正则表达式 [32]1,[32]定义一组字符,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。
结果:
范围及特殊字符的匹配
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE hp_growth REGEXP '\\.[7-9]'
ORDER BY hp_max DESC
结果:
如果要匹配特殊字符的,需要加上前导「\」,「\-」表示查找「-」,「\.」表示查找「.」
这种就是「转义(escaping)」,在正则表达式里,本身有意义的字符,比如「.」是匹配任意字符的意思。那如果要匹配它,需要转义。
注意:在 MySQL 里,是比其他的正则表达式多一个「\」的,就是「\」。
元字符 | 说明 |
---|---|
\t | 制表 |
\n | 换行 |
趣味提问:
如何匹配「\」?
答案:「\\」
匹配多个实例
\\([0-9] sticks?\\)
匹配的是(NUM stick)或者(NUM sticks)。s后的?
使得s可选。
重复元字符
*
是 0 个或多个匹配
?
是 1 个或多个匹配
{n}
是指定n个匹配
{n,}
是 不少于 n 个匹配
{n,m}
是 指定匹配的范围,m不超过 255
定位符
查询语句:
SELECT name ,role_main, hp_max,hp_growth,hp_start,role_assist
FROM heros
WHERE hp_max REGEXP '^[8-9]'
ORDER BY hp_max DESC
^值的是字符串的开始,$是字符串的结尾。
这就是 REGEXP 与 LIKE 类似,但是它独特的好处:可以通过「定位符」只匹配「子字符串」。
结果:
Ref:
- 《MySQL必知必会》(Ben Forts)
- 极客时间《SQL必知必会》