MySQL通配符与正则表达式搜过滤数据详解

通配符过滤

通配符:用来匹配值的一部分特殊字符。

通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符。

搜索模式:由字面值、通配符或者两者组合构成的搜索条件。

语法(使用LIKE操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] LIKE '[string]';

通配符 %

‘%’ 表示任何字符出现任意次数,例如 LIKE ‘jet%’ 匹配词jet起头的值,‘%anvil%’ 匹配任何位置包含文本anvil的值。

注意

  • 根据MySQL的配置方式,搜索可以是区分大小写的;
  • ‘%’ 可以匹配0个字符;
  • 值的尾空格会干扰通配符匹配,最好在搜索模式最后附加一个%;
  • ‘%’ 不能匹配NULL。

通配符 _

‘_’ 只匹配单个字符。

技巧

  • 不要过度使用通配符,因为这会很花时间;
  • 如有必要,使用通配符匹配在搜索的最后;

正则表达式过滤

语法(使用REGEXP操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] REGEXP '[string]';

字符匹配

基本匹配:‘.’ 表示匹配任意一个字符。

MySQL通配符与正则表达式搜过滤数据详解_第1张图片

正则表达式匹配不区分大小写,使用BINARY关键字区分,例如WHERE prod_name REGEXP BINARY ‘JetPack .000’。

  • OR匹配:‘1000|2000’ 表示匹配1000或者2000。
  • 多字符匹配:‘[123]’ 表示匹配 1 或 2 或 3,是 [1|2|3] 的缩写。

但是 ‘[1|2|3] Ton’ 和 ‘1|2|3 Ton’ 匹配结果并不相同,后者表示匹配 1 或 2 或 3 Ton。

  • 否定字符匹配:‘[^123]’ 表示匹配除这些字符外的任何东西。
  • 匹配范围:‘[0-9]’ 与 ‘[0123456789]’ 相同。‘[a-z]’ 匹配任意字母字符。
  • 匹配特殊字符:使用转义字符 ‘\’,例如 ‘\.’ 、’ \|’ 、‘\[’ 、‘\’。

其他字符

空白元字符

元字符 说明
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表

字符类

说明
[:alnum:] 任意字母和数字
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表
[:cntrl:] ASCII控制字符(0-31和127)
[:digit:] 任意数字
[:graph:] 与[:print:]相同,但是不包括空格
[:lower:] 任意小写字母
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]也不在[:cntrl:] 中的任意字符
[:space:] 包括空格在内的任意空白字符
[:upper:] 任意大写字符
[:xdigit:] 任意十六进制数字

重复元字符

元字符 说明
* 0个或多个匹配
+ 1个或多个匹配
? 0个或多个匹配
{n} 指定数目匹配
{n, } 不少于指定数目的匹配
{n, m} 匹配数目的范围(m不超过255)

定位元字符

元字符 说明
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾

举例:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]';

MySQL通配符与正则表达式搜过滤数据详解_第2张图片

对比

如果匹配文本在列值中出现,则LIKE不会匹配,但是REGEXP会匹配。

MySQL通配符与正则表达式搜过滤数据详解_第3张图片

可以通过用 ^ 开始每个表达式,用 $ 结束每个表达式,使得REGEXP的作用和LIKE一样。

正则表达式测试

SELECT 'hello' REGEXP '[0-9]';	//结果返回0

总结

到此这篇关于MySQL通配符与正则表达式搜过滤数据的文章就介绍到这了,更多相关MySQL通配符与正则过滤数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(MySQL通配符与正则表达式搜过滤数据详解)