天天看點

select 模糊比對 like用法詳解

在SQL結構化查詢語言中,LIKE語句有着至關重要的作用。

LIKE語句的文法格式是:select * from 表名 where 字段名 like 對應值(子串),它主要是針對字元型字段的,它的作用是在一個字元型字段列中檢索包含對應子串的。

A:%   包含零個或多個字元的任意字元串:                                                                                                                                              1、LIKE'Mc%' 将搜尋以字母 Mc 開頭的所有字元串(如 McBadden)。

2、LIKE'%inger' 将搜尋以字母 inger 結尾的所有字元串(如 Ringer、Stringer)。

3、LIKE'%en%' 将搜尋在任何位置包含字母 en 的所有字元串(如 Bennet、Green、McBadden)。 

B:_(下劃線)  任何單個字元:LIKE'_heryl' 将搜尋以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。

C:[ ] 指定範圍 ([a-f]) 或集合 ([abcdef]) 中的任何單個字元:                                                                                                           1,LIKE'[CK]ars[eo]n' 将搜尋下列字元串:Carsen、Karsen、Carson 和 Karson(如 Carson)。

2、LIKE'[M-Z]inger' 将搜尋以字元串 inger 結尾、以從 M 到 Z 的任何單個字母開頭的所有名稱(如 Ringer)。

D:[^] 不屬于指定範圍 ([a-f]) 或集合 ([abcdef]) 的任何單個字元:LIKE'M[^c]%' 将搜尋以字母 M 開頭,并且第二個字母不是 c 的所有名稱(如MacFeather)。

E:* 它同于DOS指令中的通配符,代表多個字元:c*c代表cc,cBc,cbc,cabdfec等多個字元。

F:?同于DOS指令中的?通配符,代表單個字元 :b?b代表brb,bFb等

G:# 大緻同上,不同的是代隻能代表單個數字。k#k代表k1k,k8k,k0k 。

F:[!] 排除 它隻代表單個字元

  下面我們來舉例說明一下:

例1,查詢name字段中包含有“明”字的。

select * from table1 where name like '%明%'

例2,查詢name字段中以“李”字開頭。

select * from table1 where name like '李*'

例3,查詢name字段中含有數字的。

select * from table1 where name like '%[0-9]%'

例4,查詢name字段中含有小寫字母的。

select * from table1 where name like '%[a-z]%'

例5,查詢name字段中不含有數字的。

select * from table1 where name like '%[!0-9]%'

以上例子能列出什麼值來顯而易見。但在這裡,我們着重要說明的是通配符“*”與“%”的差別。

很多朋友會問,為什麼我在以上查詢時有個别的表示所有字元的時候用"%"而不用“*”?先看看下面的例子能分别出現什麼結果:

select * from table1 where name like '*明*'

大家會看到,前一條語句列出來的是所有的記錄,而後一條記錄列出來的是name字段中含有“明”的記錄,是以說,當我們作字元型字段包含一個子串的查詢時最好采用“%”而不用“*”,用“*”的時候隻在開頭或者隻在結尾時,而不能兩端全由“*”代替任意字元的情況下。

本文轉自 落花非有意  51CTO部落格,原文連結:http://blog.51cto.com/1992zhong/1621507,如需轉載請自行聯系原作者