SQL LIKE 通配符随笔

作者在 2014-03-28 07:49:45 发布以下内容

通配符 说明
_    与任意单字符匹配
 
%    与包含一个或多个字符的字符串匹配
 
[ ]  与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。
 
[^]  与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
 

例子:

• WHERE FirstName LIKE '_im' 可以找到所有三个字母的、以 im 结尾的名字(例如,Jim、Tim)。
 
• WHERE LastName LIKE '%stein' 可以找到姓以 stein 结尾的所有员工。
 
• WHERE LastName LIKE '%stein%' 可以找到姓中任意位置包括 stein 的所有员工。
 
• WHERE FirstName LIKE '[JT]im' 可以找到三个字母的、以 im 结尾并以 J 或 T 开始的名字(即仅有 Jim 和 Tim)
 
• WHERE LastName LIKE 'm[^c]%' 可以找到以 m 开始的、后面的(第二个)字母不为 c 的所有姓。

************************

在SQL结构化查询语言中,LIKE语句有着至关重要的作用。
  
  LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
  
  假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:
  select * from table1 where name like "张*"
  
  如果要查询以“张”结尾的记录,则语句如下:
  select * from table1 where name like "*张"
这里用到了通配符“*”,可以说,like语句是和通配符分不开的。下面我们就详细介绍一下通配符。
 
  假设表table1中有以下记录:
  name        sex
  张小明       男
  李明天       男
  李a天        女
  王5五        男
  王清五       男
  
  下面我们来举例说明一下:
  例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 '*明*'
  select * from table1 where name like '%明%'
  
  大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
 
要在 match_expression 中搜索并且可以包括下列有效通配符的特定字符串。pattern 的最大长度可达 8,000 字节。 

通配符 说明 示例 
Sql代码 

%  包含零个或多个字符的任意字符串。   WHERE title <SPAN class=hilite1>LIKE</SPAN> '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名。   
  
_(下划线)  任何单个字符。 WHERE au_fname <SPAN class=hilite1>LIKE</SPAN> '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。   
  
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。  WHERE au_lname <SPAN class=hilite1>LIKE</SPAN> '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。   
  
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname <SPAN class=hilite1>LIKE</SPAN> 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。   
escape_character

 

vfp | 阅读 3400 次
文章评论,共0条
游客请输入验证码
浏览107750次
最新评论