使用LIKE可以进行模糊匹配,正则表达式也可以用于匹配内容,并且使用起来更加灵活
正则表达式的常用方式:"字段名 REGEXP 匹配模式"
| 正则表达式 | 说明 |
| ^ | 匹配字符串开始的位置 |
| $ | 匹配字符串结束的位置 |
| . | 匹配任何字符 |
| [xyz] | 匹配括号内的任意单个字符 |
| [m-n] | 匹配m到n的任意单个字符,如[0-9]、[a-z]、[A-Z] |
| * | 匹配0或多次前面的字符 |
| + | 匹配1或多次前面的字符 |
| ? | 匹配0或1次前面的字符 |
| x|y | 匹配x或y |
| {m} | 匹配m次前面的字符 |
| {m,} | 匹配大于或等于m次前面的字符 |
| {m,n} | 匹配m到n次前面的字符 |
| {0,m} | 匹配0到m次前面的字符 |
| (pattern) | 括号中的pattern是一个正则表达式,用于匹配指定pattern模式的一个表达式 |
案例
导入数据
DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
employee_id VARCHAR(8),
employee_name VARCHAR(8),
email VARCHAR(32)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
contact_info (employee_id,employee_name,email)
VALUE ('e001','王明','12345@qq.com')
,('e002','张杰','88888@163.com')
,('e003','王菲菲','wangfeifei@163.com')
,('e004','李飞','lifei001@qq.com');
contact_info表(员工联系方式表)

employee_id:员工号 employee_name:员工姓名 email:个人邮箱
1.查询姓"王"或姓"李"的员工信息
SELECT *
FROM contact_info
WHERE employee_name REGEXP '^[李王]';
结果展示:

这里使用符号"^"限制了员工姓名的姓(字符串的开头内容),使用"[李王]"限制了查询内容为"李"或"王",从而限制了开头的字符为"李"或"王"
2.查询个人邮箱至少包含3个连续的8的员工信息
SELECT *
FROM contact_info
WHERE email REGEXP '8{3,}';
结果展示:

这里在数字8后面使用{3,},代表至少连续出现3个8
3.查询个人邮箱中符号"@"之前含有任意英文字母的员工信息
SELECT *
FROM contact_info
WHERE email REGEXP '[a-zA-Z].*@';
结果展示:

这里使用[a-zA-Z]代表匹配任意英文单词,加上符号"@"的目的是限制英文字母出现在符号"@"之前,加上".*"的目的是使英文字母和@符号之间可以有任意多个或零个其他内容。如果删除这里的".*",就无法获取"李飞"的个人邮箱了,因为其个人邮箱的英文字母和符号"@"中间存在"001",所以匹配不到
本文介绍了正则表达式在MySQL中的使用,通过实例展示了如何利用正则表达式进行模糊匹配和复杂查询。例如,查询姓'李'或'王'的员工、查找邮箱中含有至少3个连续数字8的员工,以及筛选邮箱中'@'符号前有任意英文字母的员工。这些案例揭示了正则表达式的灵活性和强大功能。
1731

被折叠的 条评论
为什么被折叠?



