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

MSSQL
SQL server 随机数函数
SQLServer Top语句参数化方法
SQLServer EVENTDATA()函数来获取DDL 触发器信息
sql server 常用的几个数据类型
SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
数据库Left join , Right Join, Inner Join 的相关内容,非常实用
MySql 安装时的1045错误
SQL Server 中查看SQL句子执行所用的时间
模糊查询的通用存储过程
sql 查询慢的原因分析
SQL Server 数据库优化
数据库 日期加减处理
sql 触发器使用例子
sql 刷新视图
提升SQL Server速度 整理索引碎片
恢复.mdf 数据库步骤
Sql 批量替换所有表中内容
Sql 批量查看字符所在的表及字段
SQLServer XML数据的五种基本操作
SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 88 ::
收藏到网摘: 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字段中含有“明”的记录,所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。