赞
踩
当想查询表 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]'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。