四、通配符过滤、正则表达式

LIKE谓词:

为在搜索子句中使用通配符,必须使用 LIKE 操作符。 LIKE 指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

1. %:任何字符出现任意次数。

select column_name1 from table_name where column_name2 like 'jet%';

检索以jet开头的数据,默认不区分大小写。

2. _: 下划线匹配单个字符

只匹配一个字符,不能多也不能少,不能像%通配符一样匹配0个或多个。

3.通配符使用规则

  • 不要过度使用通配符。 如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 不要用在开头。 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置

4.正则表达式REGEXP

select column_name from table_name where column_name REGEXP '1000';

检索column_name字段中含有字符1000的数据。比如:jef1000sad;

如果使用LIKE,那么它将不会匹配jef1000sad中的1000,因为LIKE是全词匹配。

(1) .(点号)表示匹配任意一个字符
select column_name from table_name where column_name REGEXP '.000';

检索含有'000'前面有一个字符的数据。比如:

ssfdd1000
dsafd2000

这两个都可以。

(2) OR匹配
select column_name from table_name where column_name REGEXP '100|101';

把要匹配的内容用单引号括起来,此语句匹配字段中含有100或者101的值。是含有,而不是全词匹配。

(3) 匹配几个字符之一。

使用中括号:

select column_name from table_name where column_name REGEXP '[35] tom';

此语句匹配含有‘3 tom’或者‘5 tom’的字段值。注意不是全词匹配,含有就行。

此外还可以进行范围匹配:

  • [0-9],[1-3] 等等进行数字范围匹配。
  • [a-z]来匹配任意字符。
(4)匹配特殊字符。

如果我们要查找字段值中含有‘.’的值,假如我们使用:

... REGEXP '.';

那么我们将匹配中所有字段,因为在正则表达式中点号表示匹配任意一个字符。所以我们需要转义

select column_name from table_name where column_name REGEXP '\\.';

特殊字符匹配:

(5) 匹配字符类

举个例子,匹配含有空格的字段值,不仅可以使用:

... REGEXP ' ';

还可以根据上表中的[:blank:]:

select name from tb2 where name regexp '[[:blank:]]';

记住外面还需要套上个中括号才行。

(6) 匹配多个实例

举两个例子:

字符's'后面跟的问号表示匹配0个或1个,所以可以匹配到含有'stick'或者'sticks'.

下一个例子:

第一个正则表达式匹配任意出现的数字,而{4}又规定了出现4次,所以这个语句检索连续出现4个数字的字段值。

(7) 定位符

我们上面用的正则表达式都是在字段值中的任意位置进行匹配,但假如我们要检索开头的某些字符的字段值呢?

开头:^

select name from tb2 where name regexp '^[1-5]';

检索开头是以1或2或3或4或5的字段值。

结尾:$

select name from tb2 where name regexp '[mo]$';

检索以字符m或者o结尾的字段值。

^ 符号还有一个用途:
在中括号中间表示检索不在这个集合中间的值:

select name from tb2 where name regexp '[^1-3 tom]';

此语句是检索除了'1 tom','2 tom','3 tom'以外的字段值。可以看做全词否定。

猜你喜欢

转载自www.cnblogs.com/love-jelly-pig/p/10357185.html