sql搜尋like萬用字元的用法詳解
阿新 • • 發佈:2019-01-24
有很多朋友寫了幾年的like搜尋,可能對like後面萬用字元的用法都不瞭解,甚至於%的作用是什麼都不清楚。在這篇文章中,我們就一起來學習一下like查詢中萬用字元的用法吧。
我們寫的最多的查詢語句可能是這樣的
select * from computes where 欄位 name '%sql技術%'
那麼,上面sql語句中的%是起什麼作用呢?
%,sql中查詢萬用字元,它匹配包含零個或多個字元的任意字串
比如上面sql的意思就是查詢出name中包含'sql技術'的所有記錄。
因為%匹配零個或者多個字元。我們可以只使用一個%來查詢只是開始或結尾處包含'sql技術'的所有記錄,分別如下:
1,查詢所有name欄位以sql技術開頭的記錄。
select * from computes where 欄位 name 'sql技術%'
2,查詢所有name欄位以sql技術結尾的記錄。
select * from computes where 欄位 name '%sql技術'
除了%外,可能我們有忽略掉sql中另一個萬用字元了,它就是下劃線'_'。
_,匹配sql中任何單個字元
比如下面的sql
select * from hr_staff where name like '_bcd'
那麼它將返回所有name長度為4,且以'bcd'結尾的所有記錄,比如abcd,ebcd都會滿足查詢條件,但aebcd就不滿足了,因為_是匹配單個字元。
有了匹配單個與多個字元的方法了,那麼有沒有匹配指定範圍內字元的寫法呢?這個當然也是有的。就是使用範圍符中括號'[]'了。
[],指定[]內標識範圍或集合中的任何單個字元
比如,看下面的sql的寫法:
1,返回name欄位以a或者b或者c開頭的所有記錄
select * from hr_staff where name like '[a,b,c]%'
2,返回name欄位以a或者b或者c結尾的所有記錄
select * from hr_staff where name like '%[a,b,c]'
[]中集合還有一種寫法,就是以-來表示從某字元開始,到某字元結束。比如下面的sql語句
select * from hr_staff where name like '[a-c]%'
它表示查詢hr_staff表中name欄位所有從a開始,到c結束開頭的記錄,它的作用與select * from hr_staff where name like '[a,b,c]%'是一樣的。還有[0-9]表示匹配從0到9中的任意數字。
有了在範圍內的寫法,對應就會有不在範圍內的寫法:
[^],表示不屬於[]指定範圍或集合的任何單個字元
比如:[^0-9]表示不匹配任何數字。
示例:我們要查詢表table1的col1列全為數字的記錄,sql語句可以這樣寫:
select * from table1 where col1 not like '%[^0-9]%'
我們寫的最多的查詢語句可能是這樣的
select * from computes where 欄位 name '%sql技術%'
那麼,上面sql語句中的%是起什麼作用呢?
%,sql中查詢萬用字元,它匹配包含零個或多個字元的任意字串
比如上面sql的意思就是查詢出name中包含'sql技術'的所有記錄。
因為%匹配零個或者多個字元。我們可以只使用一個%來查詢只是開始或結尾處包含'sql技術'的所有記錄,分別如下:
1,查詢所有name欄位以sql技術開頭的記錄。
select * from computes where 欄位 name 'sql技術%'
2,查詢所有name欄位以sql技術結尾的記錄。
select * from computes where 欄位 name '%sql技術'
除了%外,可能我們有忽略掉sql中另一個萬用字元了,它就是下劃線'_'。
_,匹配sql中任何單個字元
比如下面的sql
select * from hr_staff where name like '_bcd'
那麼它將返回所有name長度為4,且以'bcd'結尾的所有記錄,比如abcd,ebcd都會滿足查詢條件,但aebcd就不滿足了,因為_是匹配單個字元。
有了匹配單個與多個字元的方法了,那麼有沒有匹配指定範圍內字元的寫法呢?這個當然也是有的。就是使用範圍符中括號'[]'了。
[],指定[]內標識範圍或集合中的任何單個字元
比如,看下面的sql的寫法:
1,返回name欄位以a或者b或者c開頭的所有記錄
select * from hr_staff where name like '[a,b,c]%'
2,返回name欄位以a或者b或者c結尾的所有記錄
select * from hr_staff where name like '%[a,b,c]'
[]中集合還有一種寫法,就是以-來表示從某字元開始,到某字元結束。比如下面的sql語句
select * from hr_staff where name like '[a-c]%'
它表示查詢hr_staff表中name欄位所有從a開始,到c結束開頭的記錄,它的作用與select * from hr_staff where name like '[a,b,c]%'是一樣的。還有[0-9]表示匹配從0到9中的任意數字。
有了在範圍內的寫法,對應就會有不在範圍內的寫法:
[^],表示不屬於[]指定範圍或集合的任何單個字元
比如:[^0-9]表示不匹配任何數字。
示例:我們要查詢表table1的col1列全為數字的記錄,sql語句可以這樣寫:
select * from table1 where col1 not like '%[^0-9]%'
好了,看完這篇文章後,有沒有覺的對sql的查詢又有了新的瞭解呢,呵呵,歡迎大家一起討論。