数据库笔记-SQL过滤(LIKE&正则表达式)

2020-01-23  本文已影响0人  adi0229

操作符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:

上一篇 下一篇

猜你喜欢

热点阅读