首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 9.8.2 使用“*”和“_”来匹配多个字符 在MySQL中,正则表达式(Regular Expressions)是一种强大的文本处理工具,它允许你通过模式匹配来搜索、替换或操作字符串。在SQL查询中,正则表达式特别有用,尤其是在需要执行复杂文本搜索时。MySQL通过`REGEXP`和`RLIKE`操作符(两者在功能上等价)支持正则表达式的使用。在这些操作中,特定的字符或字符组合被赋予了特殊的含义,以执行诸如匹配任意字符序列、特定位置的字符等复杂搜索任务。本章节将深入探讨如何使用`*`(注意:在MySQL正则表达式中,`*`并非直接用于匹配多个字符,而是与某个字符或字符类结合使用以表示重复;实际匹配多个字符时更常使用`.`加`*`组合或`+`等),以及一个经常被误解但在SQL中不直接用于此目的的空格字符(我们将讨论如何在正则表达式中处理空格和类似需求),来执行复杂的模式匹配。 #### 9.8.2.1 使用`.`匹配任意单个字符 首先,需要澄清的是,在MySQL正则表达式中,直接匹配多个字符通常不是通过单独的`*`实现的,而是依赖于`.`(点号)与`*`、`+`、`?`等修饰符结合使用。`.`代表匹配除换行符`\n`之外的任何单个字符。当`.`与`*`结合使用时,即`.*`,它表示匹配零个或多个任意字符,这在搜索不确定长度或位置的字符串时非常有用。 **示例**: 假设我们有一个名为`employees`的表,其中包含一列名为`email`,现在我们想找出所有包含`gmail`字符串的电子邮件地址,不论其前后是否有其他字符。 ```sql SELECT email FROM employees WHERE email REGEXP '.*gmail.*'; ``` 这里,`.*gmail.*`模式意味着“任意字符(零个或多个),后跟`gmail`,再跟任意字符(零个或多个)”。这样,无论是`john.doe@gmail.com`还是`someone@example.gmail.co.uk`都会被匹配到。 #### 9.8.2.2 使用`*`表示重复 在MySQL正则表达式中,`*`本身不直接用于匹配多个字符,而是作为一个量词,指定前面的元素(字符、字符类、子表达式等)可以出现零次或多次。例如,`a*`匹配零个或多个`a`字符。然而,正如前面所述,当与`.`结合使用时,`.*`变得非常强大,能够匹配任意长度的字符串。 **示例**: - `a*b`匹配`b`、`ab`、`aab`、`aaab`等,因为`a`可以出现零次或多次。 - `ab*c`匹配`ac`、`abc`、`abbc`等,因为`b`可以出现零次或多次。 #### 9.8.2.3 关于空格的处理 虽然标题中提到了空格,但在正则表达式中,空格被视为普通字符,直接通过空格字符本身来匹配。如果你需要在字符串中查找包含空格的模式,只需在正则表达式中相应位置包含空格即可。 **示例**: 假设我们要在`employees`表的`name`列中查找所有包含“John Doe”这样带空格的名字。 ```sql SELECT name FROM employees WHERE name REGEXP 'John Doe'; ``` 然而,如果空格的位置可能不固定(例如,可能是“John Doe”或“John Doe ”),你可以使用`.*`来允许空格或其他字符出现在`John`和`Doe`之间。 ```sql SELECT name FROM employees WHERE name REGEXP 'John.*Doe'; ``` 这样,无论`John`和`Doe`之间有多少空格或其他字符,都会被匹配到。 #### 9.8.2.4 高级用法:字符类和选择 虽然本章节主要聚焦于`*`和空格的处理,但了解正则表达式中其他元素如何与它们结合使用也很重要。字符类(如`[a-z]`匹配任何小写字母)和选择操作符(`|`)允许你构建更复杂的模式。 - **字符类**:`[abc]`匹配`a`、`b`或`c`;`[a-z]`匹配任何小写字母。 - **选择操作符**:`|`表示“或”。例如,`cat|dog`匹配`cat`或`dog`。 **结合使用示例**: ```sql SELECT name FROM employees WHERE name REGEXP '^[JM].*[a-z]+ [A-Z][a-z]+$'; ``` 这个模式匹配以`J`或`M`开头,后跟任意字符(包括零个或多个),再跟一个或多个小写字母、一个空格、一个大写字母开头后跟一个或多个小写字母的字符串。这样的模式可以匹配像“John Doe”这样的名字,同时也对格式有一定的要求。 ### 结论 通过掌握`.`、`*`以及它们与正则表达式中其他元素(如字符类、选择操作符等)的结合使用,你可以在MySQL中执行复杂的文本搜索和匹配任务。尽管空格在正则表达式中只是作为一个普通字符处理,但通过与其他正则表达式的特性结合,你可以灵活地处理包含空格的字符串模式。记住,正则表达式的强大之处在于其灵活性和表达能力,通过不断练习和尝试,你将能够编写出满足各种需求的复杂查询。
上一篇:
9.8.1 匹配指定字符中的任意一个
下一篇:
9.8.3 匹配以指定的字符开头和结束的记录
该分类下的相关小册推荐:
MySQL从入门到精通(二)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(五)
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(四)
MySQL 实战 45 讲
MySQL从入门到精通(一)
MySQL必会核心问题
MySQL8.0入门与实践