刚新建了一个表命名为:like-test,在实例查询时发现对于类似的表名,查询要使用``括起来,即键盘左上角Esc键下面那个键的英文输入符号,中文打出来的是两个点
一、SQL模式
SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。
在 MySQL中,SQL的模式缺省是忽略大小写的。
select 字段 from 表 where 某字段 like 条件
1、%:表示任意个或多个字符。可匹配任意类型和长度的字符。
比如select * from [user] where u_name like ‘%三%',将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
select * from [user] where u_name like ‘%三%' AND u_name like ‘%猫%'
若使用select * from [user] where u_name like ‘%三%猫%'虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2、_:表示任意单个字符。匹配单个任意字符,常用作占位符
比如select * from [user] where u_name like ‘_三_',只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
再比如select * from [user] where u_name like ‘三__';只找出“三脚猫”这样name为三个字且第一个字是“三”的;
二、正则模式
模式 | 什么模式匹配 |
^ | 字符串的开始 |
$ | 字符串的结尾 |
. | 任何单个字符 |
[...] | 在方括号内的任何字符列表 |
[^...] | 非列在方括号内的任何字符 |
p1|p2|p3 | 交替匹配任何模式P1,P2或P3 |
* | 零个或多个前面的元素 |
+ | 前面的元素的一个或多个实例 |
{n} | 前面的元素的n个实例 |
{m,n} | m到n个实例前面的元素 |
- 建表如下:
create table tb1(
id int not null primary key auto_increment,
pname char not null,
number int not null,
age int(3) not null,
major char not null
);
插入数据
INSERT INTO `tb1` (`pname`,`number`,`age`,`major`) VALUES ('jack',123456,18,'math');
INSERT INTO `tb1` (`pname`,`number`,`age`,`major`) VALUES ('tom',456789,19,'computer');
'economic');
'computer');
- 模式字符 ^
其含义为匹配以特定字符或者字符串开头的记录。
例如:使用“^”表达式查询tb1中major字段以m开头的记录,则语句如下:
Select major from tb1 where major regexp ‘^m’; #输出major - 模式字符 $
其含义为匹配以特定字符或者字符串结尾的记录。
例如:使用“$”表达式查询tb1中major字段以c结尾的记录,则语句如下:
Select major from tb1 where major regexp ‘c$’; #输出 ecomonic - 模式字符 .
其含义为匹配字符串中任意一个字符,包括回车或者换行等。
例如:使用“.”表达式查询tb1中number字段包含4的记录,则语句如下:
Select number from tb1 where number regexp ‘4.’; #输出带4的记录 - 模式字符 [字符集合]
其含义为匹配字符集合中任意一个字符
例如:使用“[ ]”表达式查询tb1中number字段包含456的记录,则语句如下:([]表示只要查询条件只要满足任意一个就作输出)
Select number from tb1 where number regexp ‘[456]’; # - 模式字符 S1|S2|S3
其含义为匹配 S1、S2、S3中的任意一个字符串
例如:查询tb1中major字段包含a、p或者mic字符中任意一个字符的记录,则语句如下:
Select * from tb1 where major regexp ‘a|p|mic’; #等同于select * from tb1 where major regexp '[a,p,mic]'; - 模式字符 *
其含义为匹配多个该字符之前的字符,包括0和1个。
例如:使用“*”表达式查询tb1中major字段中m字符前出现c字符的记录,则语句如下:
Select major from tb1 where major regexp ‘c*m’; - 模式字符 +
其含义为匹配多个该字符之前的字符,包括 1个。
例如:使用“+”表达式查询tb1中major字段中m字符前至少出现一个c字符的记录,则语句如下:
Select major from tb1 where major regexp ‘c+m’; - 模式字符 字符串{N}
其含义为匹配字符出现N次。
例如:使用“{N}”表达式查询tb1中major字段中连续出现2次m的记录,则语句如下:
Select major from tb1 where major regexp ‘m{2}’; - 模式字符 字符串{M,N} 其含义为匹配字符至少出现M次,做多N次。例如:使用“{M,N}”表达式查询tb1中major字段中连续出现2次m的记录,最多出现3次m字符的记录,则语句如下:
Select major from tb1 where major regexp ‘a{2,3}’;
10.模式匹配 字符串[^...]
其含义为匹配不包含[]中的内容
select major from tb1 where major regexp '[^math]';
举例时验证时发现用这种匹配时,条件必须为完整字段值,或者匹配不出来