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

本文介绍了SQL查询中通配符的基本用法,包括'%', '_' 和 '[]' 的使用场景,并展示了如何处理含有特殊字符的数据查询,通过具体示例帮助读者掌握更灵活的数据检索方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值