此文章来源:http://blog.sina.com.cn/s/blog_57c025e501000bdo.html
http://blog.csdn.net/wei0527/article/details/4086131
在SQL结构化查询语言中,LIKE语句有着至关重要的作用。
LIKE语句的语法格式是:select * from 表名 where
假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:
select * from table1 where name like "*张"
可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。
符号 | 含义 |
---|---|
LIKE '5[%]' | 5% |
LIKE '[_]n' | _n |
LIKE '[a-cdf]' | a、b、c、d 或 f |
LIKE '[-acdf]' | -、a、c、d 或 f |
LIKE '[ [ ]' | [ |
LIKE ']' | ] |
LIKE 'abc[_]d%' | abc_d 和 abc_de |
LIKE 'abc[def]' | abcd、abce 和 abcf |
通配符 | 描述 | 示例 |
---|---|---|
% | 包含零个或更多字符的任意字符串。 | WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 |
_(下划线) | 任何单个字符。 | WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 |
[ ] | 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 | WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。 |
[^] | 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 | WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。 |
匹配类型 | 模式 | 举例 及 代表值 | 说明 |
多个字符 | * | c*c代表cc,cBc,cbc,cabdfec等 | 它同于DOS命令中的通配符,代表多个字符。 |
多个字符 | % | %c%代表agdcagd等 | 这种方法在很多程序中要用到,主要是查询包含子串的。 |
特殊字符 | [*] | a[*]a代表a*a | 代替* |
单字符 | ? | b?b代表brb,bFb等 | 同于DOS命令中的?通配符,代表单个字符 |
单数字 | # | k#k代表k1k,k8k,k0k | 大致同上,不同的是代只能代表单个数字。 |
字符范围 | - | [a-z]代表a到z的26个字母中任意一个 | 指定一个范围中任意一个 |
排除 | [!字符] | [!a-z]代表9,0,%,*等 | 它只代表单个字符 |
数字排除 | [!数字] | [!0-9]代表A,b,C,d等 | 同上 |
组合类型 | 字符[范围类型]字符 | cc[!a-d]#代表ccF#等 | 可以和其它几种方式组合使用 |
假设表table1中有以下记录:
name
李明天 男
李a天 女
王5五 男
王清五 男
下面我们来举例说明一下:
select * from table1 where name like '%明%'
select * from table1 where name like '李*'
select * from table1 where name like '%[0-9]%'
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字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。