查詢所有姓張的同學
Select * from student where left(sName,1)=‘張‘ 看上去很美,如果改成查詢名字中帶亮的學生怎么做?
換一種做法 like
Select * from student where sName like ‘張%’ 會吧所有姓張的都查詢到,現在我想查詢姓張並且名字是一個字的學生?
Select * from student where sName like ‘%亮%’
^只有MSSQL Server支持,其他DBMS用not like。
通配符 %多字符匹配的通配符,它匹配任意次數(零或多個)出現的任意字符
通配符_ 單字符匹配,它匹配單個出現的字符
[] 只匹配一個字符 並且這個字符必須是[]范圍內的 [0-9] [a-z]
not與like一起使用:not like ….
要通配_、%、[、^這些字符怎么辦?[_]、[%]、[ [ ]、^(不需要放到中括號里,因為^只有放到中括號中才認為是通配符)
注意:like 'a%'與like'%a'的區別。 前者查詢首字符為a的,后者查詢末位為a的。
--通配符:_ 、 % 、 [] 、 ^
-- _ 表示任意的單個字符
--姓張,兩個字的。
select * from MyStudent where fname like '張_'
--姓張,三個字的
select * from MyStudent where fname like '張__'
-- % 匹配任意多個任意字符
--無論姓名字數,只要第一個字符是'張'的就查詢出來
select * from MyStudent where fname like '張%'
select * from MyStudent where fname like '張%' and len(fname)=2
-- [] 表示篩選,范圍。
--查詢出姓名中包含某些值的那些人
select * from TblStudent where tsname like '張[0-9]妹'
select * from TblStudent where tsname like '張_妹'
select * from TblStudent where tsname like '張[a-z]妹'
select * from TblStudent where tsname like '張[a-z0-9]妹'
select * from TblStudent where tsname like '張[^0-9]妹'
select * from TblStudent where tsname not like '張[0-9]妹'
update TblStudent set tsname=replace(tsname,'(女)','')
--通配符放到[]中就轉義了就不認為是通配符了。
--查詢出姓名中包含%的那些人
select * from TblStudent where tsname like '%[%]%'
--自己指定一個轉義符
--WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
select * from TblStudent where tsname like '%/]%' ESCAPE '/'
select * from TblStudent where tsname like '%/[%' ESCAPE '/'
select * from TblStudent where tsname like '%/[%/]%' ESCAPE '/'