REGEXP的使用
以下两个代码的运行结果一致
代码一
SELECT *
FROM customers
WHERE last_name LIKE '%field%'
代码二
SELECT *
FROM customers
WHERE last_name REGEXP 'field'
结果
案例一
WHERE last_name REGEXP '^field'
意味着姓氏必须以field开头
结果
案例二
WHERE last_name REGEXP 'field$'
意味着姓氏必须以field结尾
结果
案例三
SELECT *
FROM customers
WHERE last_name REGEXP 'field|mac'
结果
案例四
SELECT *
FROM customers
WHERE last_name REGEXP 'field|mac|rose'
结果
案例五
SELECT *
FROM customers
WHERE last_name REGEXP '^field|mac|rose'
结果
所以该模式表示,查询姓氏以field开头的,或者包含mac或者rose的
案例六
举一反三
SELECT *
FROM customers
WHERE last_name REGEXP 'field$|mac|rose'
结果
案例七
寻找姓氏里有“e”的顾客
SELECT *
FROM customers
WHERE last_name REGEXP 'e'
案例八
寻找姓氏里有“e”的顾客,并且"e"前是“g”或者“i"或者"m"
即查找含有"ge"或"ie"或"me"
(同理 也可以将”[ ]“放在"e"的后面,查询"eg"或"“”")
SELECT *
FROM customers
WHERE last_name REGEXP '[gim]e'
结果
案例九
下述代码返回内容一致
代码一
SELECT *
FROM customers
WHERE last_name REGEXP '[abcdefg]e'
结果
代码二
SELECT *
FROM customers
WHERE last_name REGEXP '[a-h]e'
结果
注意:此时"[ ]"内的h是不好含在里面的
小结
- “^”表示字符串的开头
- “$”表示字符串的结尾
- "|"代表逻辑上的or,可用于表示多个搜索模式
- "[abcd]"用于匹配任意在括号里列举的单字符
- "[a-x]"用于匹配a-(x-1)的字符
练习
查询符合以下条件的客户
- 名(first name)是 ELKA or AMBUR
- 姓(last name)以 EY or ON 结尾
- 姓以 MY 开始或 包含 SE
- 姓 包含 BR 或 BU
题目一
SELECT *
FROM customers
WHERE first_name REGEXP 'ELKA|AMBUR'
结果
题目二
SELECT *
FROM customers
WHERE last_name REGEXP 'EY$|ON$'
结果
题目三
SELECT *
FROM customers
WHERE last_name REGEXP '^MY|SE'
结果
题目四
方法一:
SELECT *
FROM customers
WHERE last_name REGEXP 'BR|BU'
方法二
SELECT *
FROM customers
WHERE last_name REGEXP 'B[RU]'