一、前言
在SQL查询中,能对char, varchar,datetime等字段类型的列用Like子句配合通配符选取那些"很像…"的数据记录,以下是可使用的通配符:
a. "%" -->零个或者多个字符
b. "_" -->单一任何字符
c. "[]" -->在某一范围内的字符,e.g. 【0~9】
d. "[^]" -->不在某范围内的字符,如[^0-9]
二、四种匹配模式
假设user 这张表中只有一个字段'name',并且有四条记录:"张三","王三","唐三藏","一二三".
1.%表示任意0个或者多个字符,可匹配任意类型长度的字符:
<pre name="code" class="sql">select * from user where name like '%三%'
会把 "张三","王三","唐三藏","一二三" 给查出来,而
select * from user where name like '%三';
则只会查出来 "张三","王三","一二三"
select * from user where name like '%三%藏';
只会查出来 "唐三藏"。
2._表示任意单个字符,匹配单个任意字符,它常用来限制表达式的字符长度。
select * from user where name like '_三';
表示总共有两个字符,并且第二个字符为‘三’,结果:"张三","王三"
select * from user where name like '_三_';
表示总共有三个字符,并且第二个字符为‘三’,结果:"唐三藏"
3.[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
select * from user where name regexp '[王张]三';
结果:"张三","王三"
4.[^ ] :表示不在括号所列之内的单个字符。其取值和[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
select * from user where name regexp '[^王张]三';
结果:"唐三藏","一二三"
注:本章适用于MySQL,如果使用 regexp则是使用正则匹配模式,可用于一般的正则匹配规则。