当前位置: 首页 > 图文教程 > 数据库 > MSSQL > sql查询like操作数剖析

MSSQL
SQL Server 中死锁产生的原因及解决办法
教你在SQL Server 2000数据库中使用分区
数据仓库基本报表制作过程中的SQL写法
自动定时重启sql server回收内存
轻松解决SQL Server 2005中的常见问题
用一个案例讲解SQL Server数据库恢复
安装SQL Server 2005时出现计数器错误
讲解SQL Server 2005数据库的同义词Bug
利用SQL语句对不同数据库进行高效果分页
三种数据库利用SQL语句进行高效果分页
数据库连接字符串的常见问题和解决方法
教你快速掌握一些方便易用的SQL语句
深入分析SQL Server的数据转换服务
系统默认的MySQL用户名消失的解决方法
SQL 2008邮件故障排除:发送测试电子邮件
SQL Server 2005日志文件损坏的处理方法
在SQL Server 2005数据库中进行错误捕捉
SQL Server查询速度慢原因及优化方法
加密SQL Anywhere 提升政府行业数据安全
Windows Server 2008之数据安全保护

MSSQL 中的 sql查询like操作数剖析


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 151 ::
收藏到网摘: n/a

在SQL结构化查询语言中,LIKE语句有着至关重要的作用。

  LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。

  假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:

   select * from table1 where name like "张*"

   如果要查询以“张”结尾的记录,则语句如下:

  select * from table1 where name like "*张"

   这里用到了通配符“*”,可以说,like语句是和通配符分不开的。下面我们就详细介绍一下通配符。

  匹配类型  
  模式
  举例 及 代表值
  说明
  多个字符
  *
  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 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字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。