| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> mssql >> 解析Microsoft Sql Server中的like语句
 

解析Microsoft Sql Server中的like语句

2008-12-13 08:23:53 编辑來源:互联网 繁體版 评论
 
 
  LIKE,确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。

  如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。

  语法 view plaincopy to clipboardprint?

  match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

  match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]参数

  match_expression

  任何字符串数据类型的有效 SQL Server 表达式。

  pattern

  match_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。

  通配符 描述示例

  % 包含零个或更多字符的任意字符串。 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

  字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。

  结果类型

  Boolean

  结果值

  如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。

  注释

  当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空格。如果查询中的比较要返回包含"abc "(abc 后有一个空格)的所有行,则将不会返回包含"abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"(abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。

  本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=94371

  由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,用一个性氏作为变量传递。 view plaincopy to clipboardprint?

  CREATE PROCEDURE find_books @AU_LNAME char(20)

  

  AS

  

  SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

  

  SELECT t.title_id, t.title

  

  FROM authors a, titleauthor ta, titles t

  

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  

  AND a.au_lname LIKE @AU_LNAME

  CREATE PROCEDURE find_books @AU_LNAME char(20)

  AS

  SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

  SELECT t.title_id, t.title

  FROM authors a, titleauthor ta, titles t

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。

  但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中: view plaincopy to clipboardprint?

  USE pubs

  

  GO

  

  CREATE PROCEDURE find_books2 @au_lname varchar(20)

  

  AS

  

  SELECT t.title_id, t.title

  

  FROM authors a, titleauthor ta, titles t

  

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  

  AND a.au_lname LIKE @au_lname + '%'

  

  EXEC find_books2 'ring'

  USE pubs

  GO

  CREATE PROCEDURE find_books2 @au_lname varchar(20)

  AS

  SELECT t.title_id, t.title

  FROM authors a, titleauthor ta, titles t

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  AND a.au_lname LIKE @au_lname + '%'

  EXEC find_books2 'ring'下面是结果集:

  title_id title

  -------- -----------------

  MC3021 The Gourmet Microwave

  PS2091 Is Anger the Enemy?

  PS2091 Is Anger the Enemy?

  PS2106 Life Without Fear

  (4 row(s) affected)

  由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,用一个性氏作为变量传递。 view plaincopy to clipboardprint?

  CREATE PROCEDURE find_books @AU_LNAME char(20)

  

  AS

  

  SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

  

  SELECT t.title_id, t.title

  

  FROM authors a, titleauthor ta, titles t

  

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  

  AND a.au_lname LIKE @AU_LNAME

  CREATE PROCEDURE find_books @AU_LNAME char(20)

  AS

  SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

  SELECT t.title_id, t.title

  FROM authors a, titleauthor ta, titles t

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。

  但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中: view plaincopy to clipboardprint?

  USE pubs

  

  GO

  

  CREATE PROCEDURE find_books2 @au_lname varchar(20)

  

  AS

  

  SELECT t.title_id, t.title

  

  FROM authors a, titleauthor ta, titles t

  

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  

  AND a.au_lname LIKE @au_lname + '%'

  

  EXEC find_books2 'ring'

  USE pubs

  GO

  CREATE PROCEDURE find_books2 @au_lname varchar(20)

  AS

  SELECT t.title_id, t.title

  FROM authors a, titleauthor ta, titles t

  WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

  AND a.au_lname LIKE @au_lname + '%'

  EXEC find_books2 'ring'下面是结果集:

  title_id title

  -------- -----------------

  MC3021 The Gourmet Microwave

  PS2091 Is Anger the Enemy?

  PS2091 Is Anger the Enemy?

  PS2106 Life Without Fear

  (4 row(s) affected)
 
 
 
 
上一篇《重启IIS和SQL Server命令》
下一篇《读取随机记录的例子 SQL语句》
 
 
 
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
 
LIKE,确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。 如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。 语法 view plaincopy to clipboardprint? match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]参数 match_expression 任何字符串数据类型的有效 SQL Server 表达式。 pattern match_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。 通配符 描述示例 % 包含零个或更多字符的任意字符串。 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 字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。 结果类型 Boolean 结果值 如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。 注释 当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空格。如果查询中的比较要返回包含"abc "(abc 后有一个空格)的所有行,则将不会返回包含"abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"(abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。 本贴来自ZDNetChina中文社区 [url=http://bbs.zdnet.com.cn]http://bbs.zdnet.com.cn[/url] ,本贴地址:[url=http://bbs.zdnet.com.cn/viewthread.php?tid=94371]http://bbs.zdnet.com.cn/viewthread.php?tid=94371[/url] 由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,用一个性氏作为变量传递。 view plaincopy to clipboardprint? CREATE PROCEDURE find_books @AU_LNAME char(20) AS SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%' SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @AU_LNAME CREATE PROCEDURE find_books @AU_LNAME char(20) AS SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%' SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。 但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中: view plaincopy to clipboardprint? USE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%' EXEC find_books2 'ring' USE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%' EXEC find_books2 'ring'下面是结果集: title_id title -------- ----------------- MC3021 The Gourmet Microwave PS2091 Is Anger the Enemy? PS2091 Is Anger the Enemy? PS2106 Life Without Fear (4 row(s) affected) 由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,用一个性氏作为变量传递。 view plaincopy to clipboardprint? CREATE PROCEDURE find_books @AU_LNAME char(20) AS SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%' SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @AU_LNAME CREATE PROCEDURE find_books @AU_LNAME char(20) AS SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%' SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。 但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中: view plaincopy to clipboardprint? USE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%' EXEC find_books2 'ring' USE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%' EXEC find_books2 'ring'下面是结果集: title_id title -------- ----------------- MC3021 The Gourmet Microwave PS2091 Is Anger the Enemy? PS2091 Is Anger the Enemy? PS2106 Life Without Fear (4 row(s) affected)
󰈣󰈤
 
 
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
时尚性感的燕子(3)
时尚性感的燕子(2)
纯美的女生生活写真(14)
纯美的女生生活写真(13)
来自束河[]
恰巧-巧家~~
高尔夫
行摄匆匆天子山
 
>>返回首页<<
 为你推荐
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有