WHERE子句使用正则表达式进行搜索过滤

正则表达式:在列值内进行匹配(通配符匹配整列)

1基本字符匹配

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000’
ORDER BY prod_name;

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘.000’
ORDER BY prod_name;
.是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符

使用LIKE和通配符表示:
SELECT prod_name
FROM products
WHERE prod_name LIKE ‘%000’
ORDER BY prod_name;

输出:
JetPack 1000
JetPack 2000

举例说明LIKE和REGEXP的区别:
SELECT prod_name
FROM products
WHERE prod_name LIKE ‘1000’
ORDER BY prod_name;
不返回数据

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000’
ORDER BY prod_name;
返回 JetPack 1000

LIKE匹配这个列,如果被匹配的文本在列值中出现,LIKE将不会找到。
REGEXP在列值中进行匹配,如果被匹配的文本在列值中出现,相应的行将被返回。REGEXP也可以使用^和$匹配整列。
匹配不区分大小写,如果要区分大小写,可以使用BINARY关键字(WHERE prod_name REGEXP BINARY ‘JetPack .000’)

2OR匹配

|位正则表达式的OR匹配,表示匹配其中之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1000|2000’
ORDER BY prod_name;
输出:
JetPack 1000
JetPack 2000

3匹配几个字符之一

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘[123] Ton’
ORDER BY prod_name;
输出:
1 ton anvil
2 ton anvil
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘1|2|3 Ton’
ORDER BY prod_name;
匹配1 或2 或3 ton
[^123]匹配处这些字符以外的任何字符

4匹配范围

[0-9] [a-z]

5匹配特殊字符

SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘.’
ORDER BY prod_name;
表示匹配任意字符,每行都被检索出来
\进行转义
SELECT prod_name
FROM products
WHERE prod_name REGEXP ‘\.’
ORDER BY prod_name;
匹配.
空白元字符
\f 换页
\n 换行
\r 回车
\t 制表
\v 纵向制表
\\ 反斜杠
多数正则表达式实现使用单个反斜杠转义特殊字符,MySQL要求两个反斜杠\(MySQL自己解释一个,正则表达式库解释一个)

6匹配字符类(使用预定义的字符集)

7匹配多个实例

  • 0个或多个匹配
  • 1个或多个匹配(等于{1,})
    ? 0个或一个匹配(等于{0,1})
    {n} 指定数目的匹配
    {n,} 不少于指定数目的匹配
    {n,m} 匹配数目的范围(m不超过255)

8定位符

^ 文本的开始
$ 文本的结尾
[[:<:]]词的开始
[[:<:]]词的结尾

你可能感兴趣的:(MySQL)