注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

T-SQL入门攻略之4-通配符使用  

2010-07-19 01:53:26|  分类: SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

--> Title  : T-SQL入门攻略之4-通配符使用

 

--> Author : wufeng4552

 

--> Date   : 2010-03-24

 

1:通配符”%” 该通配符可以与任意字符串相匹配(包括空值)

 

SELECT s_no as 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_birthday 年龄 ,

 

       s_speciality 专业,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别

 

FROM student --依然使用上节目的数据表student

 

Where s_name like '王%'

 

以上查询所有姓王的学生

 

同样如果可以与谓词NOT配合查询,实现对某一类的排除查询

 

如:查询所有非姓王的学生

 

Where s_name NOT like '王%'

 

同样如果查询包含“王”字的学生,不仅仅是“王”字开头的

 

Where s_name  like '%王%'

 

2:通配符”_” 该通配符可以与任意的单字符相匹配

 

SELECT s_no as 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_birthday 年龄 ,

 

       s_speciality 专业,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别

 

FROM student --依然使用上节目的数据表student

 

WHERE rtrim(s_name) LIKE N'王_'

 

以上查询所有王姓的,同时是两个字的学生

 

注:rtrim()作用是去掉结尾的空格,因为s_name是nchar()会在后面生成空格

 

但是你用len()函数测试的时候又会发现长度依然是2

 

那是因为len()不计尾部空格,初学者对这个开始时候比较迷茫,故在此解释

 

WHERE rtrim(s_name) LIKE N'王_'

 

等同与

 

WHERE s_name LIKE N'王%' and len(s_name)=2

 

同样可以用谓词实现相反的查询

 

WHERE rtrim(s_name)NOT LIKE N'王_'

 

同样可以查询姓名是两个字的学生

 

WHERE rtrim(s_name) LIKE N'__'

 

2:通配符”[]”该通配符实现在指定范围内单字符匹配”[]”用于指定范围,

 

同时如果实现与”%”,”_”(此时不错通配符)实现匹配也可以使用通配符,将他们放入”[]”内即可。

 

SELECT s_no as 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_birthday 年龄 ,

 

       s_speciality 专业,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别

 

FROM student --依然使用上节目的数据表student

 

WHERE s_no like '2006020[134]'

 

以上查询学好尾数是134的学生

 

通过上述介绍查询字段中包含”%”,”_”的记录用like ”%”,”_”无法实现预期目的

 

创建测试数据

 

if object_id('student2','U')is not null drop table student2

 

go

 

CREATE TABLE student2(

 

s_no nchar(8) PRIMARY KEY,

 

s_name nchar(8)NOT NULL,

 

s_sex nchar(2)CHECK(s_sex = N'男' OR s_sex = N'女'),

 

s_birthday smalldatetime CHECK(s_birthday>='1970-1-1' AND s_birthday<='2000-1-1'),

 

s_speciality nvarchar(50)DEFAULT  N'计算机软件与理论',

 

s_avgrade numeric(3,1)CHECK(s_avgrade >= 0 AND s_avgrade <= 100),

 

s_dept nvarchar(50)    DEFAULT  N'计算机科学系'

 

);

 

INSERT INTO student2 Values('20060201',N'李好',N'男', '1987-1-1', N'计算机应用技术', 94.5, N'计算机系');

 

INSERT INTO student2 Values('20060202',N'王丫',N'女', '1987-2-23', N'计算机软件与理论', 88.8, N'计%机系');

 

INSERT INTO student2 Values('20060203',N'王智高',N'男', '1986-12-25', N'网络工程', 85.8, N'信%程系');

 

INSERT INTO student2 Values('20060204',N'赵刚',N'男', '1988-7-1', N'网络工程', 77.8, N'信息工程系');

 

INSERT INTO student2 Values('20060205',N'贾志',N'男', '1985-9-18', N'计算机应用技术', 45.0, N'计_机系');

 

INSERT INTO student2 Values('20060206',N'丽思',N'女', '1984-8-1', N'计算机应用技术', 61.3, N'计_机系');

 

INSERT INTO student2 Values('20060207',N'赵智远',N'男', '1983-11-2', N'电子商务', 72.8, N'电子商务系');

 

INSERT INTO student2 Values('20060208',N'王可',N'女', '1985-5-28', N'电子商务', 55.7, N'_商务系');

 

SELECT s_no 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别 FROM student2

 

WHERE s_dept LIKE '%[%]%'

 

--以上查询系别中含有%的纪录

 

同样可以查询系别中含有_的记录

 

WHERE s_dept LIKE '%[-]%'

 

3:通配符”[^]”作用与”[]”相反 用于匹配没有在方括号中列出的字符

 

 

 

SELECT s_no as 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_birthday 年龄 ,

 

       s_speciality 专业,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别

 

FROM student --依然使用上节目的数据表student

 

WHERE s_no like '2006020[^134]'

 

以上查询学好尾数不是134的学生

 

等价语句为

 

WHERE s_no NOT like '2006020[134]

 

同时语句

 

WHERE s_no not like '2006020[^134]'

 

与下面语句等价

 

WHERE s_no like '2006020[134]'

 

4:使用关键词Escape定义转义字符

 

如果列值中包含”%”,”_”,”[]”,”[^]”等字符时候可以用ESCAPE定义转义字符的功能来实现对此类字符的查询。

 

ESCAPE的作用就是将一个字符定义为转义字符,格式如下:

 

Like 's1Xts2' escape 'X'

 

以上t是某一个通配符,s1和s2可以是任意的字符串(含通配符),其作用是将字符X定义成转义字符,执行时DBMS将字符's1Xts2'中的通配符t作为实际值处理,从而使得t失去通配符的作用

 

上面的语句

 

SELECT s_no 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别 FROM student2

 

WHERE s_dept LIKE '%[%]%'

 

等价于下面语句

 

SELECT s_no 学号,

 

       s_name 姓名,

 

       s_sex 性别 ,

 

       s_avgrade 平均成绩 ,

 

       s_dept 系别 FROM student2

 

WHERE s_dept LIKE '%X%%'escape 'X'

 

同样查询包含”[^]”可以这样

 

 

 

WHERE s_dept LIKE '%X[^]%'escape 'X'

 

 

  评论这张
 
阅读(661)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017