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


放在通配符之前用于指示通配符应当解释为常规字符而不是通配符的字符。escape_character 是字符表达式,无默认值,并且计算结果必须仅为一个字符。
评论
发表评论

您还没有登录,请登录后发表评论