当前位置:   article > 正文

REGEXP 运算符--正则表达式- SQL_sql regexp

sql regexp

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

第一个例子

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

SELECT *
FROM customers
WHERE last_name LIKE '%field%'
  • 1
  • 2
  • 3

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

SELECT *
FROM customers
WHERE last_name REGEXP 'field' 
  • 1
  • 2
  • 3

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

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

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

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

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

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

当有下面情况, 表示

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

第二个例子

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

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

可以用 ‘[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
  • 1
  • 2
  • 3
  • 4
  • 5

代码实现:

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]'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/889935
推荐阅读
  

闽ICP备14008679号