REGEXP 运算符--正则表达式- SQL

2-8 REGEXP 运算符–正则表达式- SQL

第一个例子

当想查询表 customers 中的 last_name 中有 field 的数据, 代码如下

SELECT *
FROM customers
WHERE last_name LIKE '%field%'

MySql 中还有另外一个运算符, REGEXP 是正则表达式(regular expression) 的缩写 . 正则表达式在搜索字符串时非常强大. 它允许我们搜索更复杂的模式.

SELECT *
FROM customers
WHERE last_name REGEXP 'field' 

我们可以用 ‘^’ 表示字符串的开头,

SELECT *
FROM customers
WHERE last_name REGEXP '^field' -- 表示我们的姓氏必须以field开头

我们还用美元符号 $ 代表字符串末尾,

SELECT *
FROM customers
WHERE last_name REGEXP 'field$' -- 表示我们的姓氏必须以field结尾

这里可以搜寻多个单词, 比如, 假设我们想查询一些顾客, 他们姓氏包含 field 或者 mac, 我们使用 | 并输入另外一个模式. 可以使用多个 | 表示多个搜寻模式.

SELECT *
FROM customers
WHERE last_name REGEXP 'field|mac' -- 表示姓氏中包含field或者mac

当有下面情况, 表示

SELECT *
FROM customers
WHERE last_name REGEXP '^field|mac|rose' -- 表示查询以field开头的姓氏或者姓氏中含有mac或者姓氏中含有rose
SELECT *
FROM customers
WHERE last_name REGEXP 'field$|mac|rose' -- 表示查询以field结尾的姓氏或者姓氏中含有mac或者姓氏中含有rose

第二个例子

假设你想搜寻姓氏里有 e 的顾客, 如果你想要确保在 e 前要有 g 或者 i 两者之一, 这时需要用到方括号 [], 在括号里加上多个字母, 比如 g i m, 对应了任何姓氏里有 ge 或者 ie 或者 me 的顾客.

SELECT *
FROM customers
WHERE last_name REGEXP '[gim]e' -- 方括号[]可以放到e前面, 也可以放到e后面

可以用 ‘[a-h]e’ 表示 ‘[abcdefg]e’.
总结:
^ beginning
$ end
| logical or
[abcd] 使用 [] 匹配任意在括号里列举的单字符.
a-f 表示 [abcdefg], - 代表一个范围.

例题

问题:

-- Get the customers whose
--		first names are ELKA or AMBUR
--		last names end with EY or ON
--		last names start with MY or contains SE
--		last names contain B followed by R or U

代码实现:

SELECT *
FROM customers
-- WHERE first_name REGEXP 'ELKA|AMBUR'
-- WHERE last_name REGEXP 'EY$|ON$'
-- WHERE last_name REGEXP '^MY|SE'
WHERE last_name REGEXP 'B[RU]'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值