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

操作符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必知必会》
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容