﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-飘着的叶子，什么时候才落地-文章分类-程序思想感悟</title><link>http://www.cnitblog.com/piaoye12345/category/1001.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 01:50:47 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 01:50:47 GMT</pubDate><ttl>60</ttl><item><title>SQL SERVER常用函数 </title><link>http://www.cnitblog.com/piaoye12345/articles/3629.html</link><dc:creator>萌芽的叶子</dc:creator><author>萌芽的叶子</author><pubDate>Fri, 28 Oct 2005 03:31:00 GMT</pubDate><guid>http://www.cnitblog.com/piaoye12345/articles/3629.html</guid><wfw:comment>http://www.cnitblog.com/piaoye12345/comments/3629.html</wfw:comment><comments>http://www.cnitblog.com/piaoye12345/articles/3629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/piaoye12345/comments/commentRss/3629.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/piaoye12345/services/trackbacks/3629.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; CA<BR>Locksley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>Yokomoto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>DeFrance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN<BR>Stringer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>MacFeather&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>Karsen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>Panteley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MD<BR>Hunter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA<BR>McBadden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CA
<P>(17 row(s) affected)</P>
<P>B. 将 IN 与子查询一起使用<BR>下面的示例在 titleauthor 表中查找从任一种书得到的版税少于 50% 的所有作者的 au_ids，然后从 <BR>authors 表中选择 au_ids 与 titleauthor 查询结果匹配的所有作者的姓名。结果显示有一些作者属于得<BR>到的版税少于 50% 的一类。</P>
<P>USE pubs<BR>SELECT au_lname, au_fname<BR>FROM authors<BR>WHERE au_id IN<BR>&nbsp;&nbsp; (SELECT au_id<BR>&nbsp;&nbsp; FROM titleauthor<BR>&nbsp;&nbsp; WHERE royaltyper &lt; 50)</P>
<P>下面是结果集：</P>
<P>au_lname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; au_fname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>---------------------------------------- -------------------- <BR>Green&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marjorie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>O’Leary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Michael&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Gringlesby&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Burt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Yokomoto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Akiko&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>MacFeather&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stearns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Ringer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Anne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>(6 row(s) affected)</P>
<P>C. 将 NOT IN 与子查询一起使用<BR>NOT IN 将找到那些与值列表中的项目不匹配的作者。下面的示例查找至少有一种书取得不少于 50% 的版税的<BR>作者姓名：</P>
<P>USE pubs<BR>SELECT au_lname, au_fname<BR>FROM authors<BR>WHERE au_id NOT IN<BR>&nbsp;&nbsp; (SELECT au_id<BR>&nbsp;&nbsp; FROM titleauthor<BR>&nbsp;&nbsp; WHERE royaltyper &lt; 50)</P>
<P>下面是结果集：</P>
<P>au_lname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; au_fname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>---------------------------------------- -------------------- <BR>White&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Johnson&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Carson&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cheryl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Straight&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Smith&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Meander&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Bennet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Abraham&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Dull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ann&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Locksley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Charlene&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Greene&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Morningstar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Blotchet-Halls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reginald&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>del Castillo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Innes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>DeFrance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Michel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Stringer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dirk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Karsen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Livia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Panteley&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sylvia&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Hunter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheryl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>McBadden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heather&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Ringer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Albert&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>(17 row(s) affected)</P>
<P>&nbsp;</P>
<P>7.LIKE<BR>确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中，常规字符<BR>必须与字符串中指定的字符完全匹配。然而，可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串<BR>比较运算符相比，使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型，<BR>Microsoft? SQL Server? 会将其转换成字符串数据类型（如果可能）。</P>
<P>语法<BR>match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]</P>
<P>参数<BR>match_expression</P>
<P>任何字符串数据类型的有效 SQL Server 表达式。</P>
<P>pattern</P>
<P>match_expression 中的搜索模式，可以包含下列有效 SQL Server 通配符。</P>
<P>通配符 描述 示例 <BR>% 包含零个或更多字符的任意字符串。 WHERE title LIKE ’%computer%’ 将查找处于书名任意位置的包含<BR>单词 computer 的所有书名。 <BR>_（下划线） 任何单个字符。 WHERE au_fname LIKE ’_ean’ 将查找以 ean 结尾的所有 4 个字母的名字<BR>（Dean、Sean 等）。 <BR>[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE ’[C-P]arsen’ <BR>将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏，例如，Carsen、Larsen、<BR>Karsen 等。 <BR>[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE ’de[^l]%’ <BR>将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。 </P>
<P><BR>escape_character</P>
<P>字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值，<BR>且必须仅包含一个字符。</P>
<P>结果类型<BR>Boolean</P>
<P>结果值<BR>如果 match_expression 匹配指定模式，LIKE 将返回 TRUE。</P>
<P>注释<BR>当使用 LIKE 进行字符串比较时，模式字符串中的所有字符都有意义，包括起始或尾随空格。如果查询中的比<BR>较要返回包含"abc "（abc 后有一个空格）的所有行，则将不会返回包含"abc"（abc 后没有空格）的列所在<BR>行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"（abc 后没有空<BR>格）的所有行，则将返回以"abc"开始且具有零个或多个尾随空格的所有行。</P>
<P>由于数据存储方式的原因，使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了<BR>解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存<BR>储过程，然后使用模式匹配查找某个作者的所有著作。在此过程中，作者的姓将作为变量传递。</P>
<P>CREATE PROCEDURE find_books @AU_LNAME char(20)<BR>AS<BR>SELECT @AU_LNAME = RTRIM(@AU_LNAME) + ’%’<BR>SELECT t.title_id, t.title <BR>FROM authors a, titleauthor ta, titles t<BR>WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id<BR>&nbsp;&nbsp; AND a.au_lname LIKE @AU_LNAME</P>
<P>当名字中包含的字符数小于 20 时，char 变量 (@AU_LNAME) 将包含尾随空格，这导致 find_books 过程中<BR>没有行返回。由于 au_lname 列为 varchar 类型，所以没有尾随空格。因为尾随空格是有意义的，所以此过<BR>程失败。 </P>
<P>但下面的示例是成功的，因为尾随空格没有被添加到 varchar 变量中：</P>
<P>USE pubs<BR>GO<BR>CREATE PROCEDURE find_books2 @au_lname varchar(20)<BR>AS<BR>SELECT t.title_id, t.title <BR>FROM authors a, titleauthor ta, titles t<BR>WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id<BR>&nbsp;&nbsp; AND a.au_lname LIKE @au_lname + ’%’</P>
<P>EXEC find_books2 ’ring’</P>
<P>下面是结果集：</P>
<P>title_id title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>-------- ---------------------------------------------------------------<BR>MC3021&nbsp;&nbsp; The Gourmet Microwave&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>PS2091&nbsp;&nbsp; Is Anger the Enemy?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>PS2091&nbsp;&nbsp; Is Anger the Enemy?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>PS2106&nbsp;&nbsp; Life Without Fear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>(4 row(s) affected)</P>
<P>使用 LIKE 的模式匹配<BR>当搜索 datetime 值时，推荐使用 LIKE，因为 datetime 项可能包含各种日期部分。例如，如果将值 <BR>19981231 9:20 插入到名为 arrival_time 的列中，则子句 WHERE arrival_time = 9:20 将无法找到 <BR>9:20 字符串的精确匹配，因为 SQL Server 将其转换为 1900 年 1 月 1 日上午 9:20。然而，子句 <BR>WHERE arrival_time LIKE ’%9:20%’ 将找到匹配。</P>
<P>LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数，包括 match_expression、pattern 和 <BR>escape_character（如果有）都是 ASCII 字符数据类型时，将执行 ASCII 模式匹配。如果其中任何参数属<BR>于 Unicode 数据类型，则所有参数将被转换为 Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据<BR>（nchar 或 nvarchar 数据类型）使用 LIKE 时，尾随空格是有意义的。但是对于非 Unicode 数据，尾随<BR>空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容。</P>
<P>下面的一系列示例显示 ASCII LIKE 模式匹配与 Unicode LIKE 模式匹配所返回的行之间的差异：</P>
<P>-- ASCII pattern matching with char column<BR>CREATE TABLE t (col1 char(30))<BR>INSERT INTO t VALUES (’Robert King’)<BR>SELECT * <BR>FROM t <BR>WHERE col1 LIKE ’% King’&nbsp;&nbsp; -- returns 1 row</P>
<P>-- Unicode pattern matching with nchar column<BR>CREATE TABLE t (col1 nchar(30))<BR>INSERT INTO t VALUES (’Robert King’)<BR>SELECT * <BR>FROM t <BR>WHERE col1 LIKE ’% King’&nbsp;&nbsp; -- no rows returned</P>
<P>-- Unicode pattern matching with nchar column and RTRIM<BR>CREATE TABLE t (col1 nchar (30))<BR>INSERT INTO t VALUES (’Robert King’)<BR>SELECT * <BR>FROM t <BR>WHERE RTRIM(col1) LIKE ’% King’&nbsp;&nbsp; -- returns 1 row</P>
<P>&nbsp;</P>
<P>说明&nbsp; 如果使用 LIKE 进行字符串比较，模式字符串中的所有字符都有意义，包括起始空格或尾随空格。</P>
<P><BR>使用 % 通配符<BR>如果指定 LIKE ’5%’，SQL Server 将搜索后面带有零个或多个任意字符的数字 5。 </P>
<P>例如，此查询将显示数据库中所有的系统表，因为它们都以字母 sys 开始：</P>
<P>SELECT TABLE_NAME<BR>FROM INFORMATION_SCHEMA.TABLES<BR>WHERE TABLE_NAME LIKE ’sys%’</P>
<P>&nbsp;</P>
<P>说明&nbsp; 请注意：系统表可以随版本不同而更改。推荐使用信息架构视图或适用的存储过程处理 SQL Server <BR>系统表。</P>
<P><BR>若要查阅非系统表的所有对象，请使用 NOT LIKE ’sys%’。如果共有 32 个对象且 LIKE 找到 13 个与模式<BR>匹配的名称，则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象。</P>
<P>使用 LIKE ’[^s][^y][^s]%’ 模式不一定每次找到的名称都相同。可能仅得到 14 个名称（而不是 19 <BR>个），除了系统表名称外，所有以 s 开始或第二个字母为 y 或第三个字母为 s 的名称也都将从结果中消<BR>除。这是因为用反向通配符匹配字符串是分步骤进行计算的，一次一个通配符。如果在计算过程中任一环节匹<BR>配失败，那么就会将其消除。</P>
<P>将通配符作为文字使用<BR>可以将通配符模式匹配字符串用作文字字符串，方法是将通配符放在括号中。下表显示了使用 LIKE 关键字<BR>和 [ ] 通配符的示例。</P>
<P>符号 含义 <BR>LIKE ’5[%]’ 5% <BR>LIKE ’[_]n’ _n <BR>LIKE ’[a-cdf]’ a、b、c、d 或 f <BR>LIKE ’[-acdf]’ -、a、c、d 或 f <BR>LIKE ’[ [ ]’ [ <BR>LIKE ’]’ ] <BR>LIKE ’abc[_]d%’ abc_d 和 abc_de <BR>LIKE ’abc[def]’ abcd、abce 和 abcf </P>
<P><BR>使用 ESCAPE 子句的模式匹配<BR>可搜索包含一个或多个特殊通配符的字符串。例如，customers 数据库中的 discounts 表可能存储含百分<BR>号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号，必须提供 ESCAPE 关键字和转义符。例如，一<BR>个样本数据库包含名为 comment 的列，该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 <BR>30% 的任何行，请指定由 WHERE comment LIKE ’%30!%%’ ESCAPE ’!’ 组成的 WHERE 子句。如果不指定 <BR>ESCAPE 和转义符，SQL Server 将返回所有含字符串 30 的行。</P>
<P>下例说明如何在 pubs 数据库 titles 表的 notes 列中搜索字符串"50% off when 100 or more copies <BR>are purchased"：</P>
<P>USE pubs<BR>GO<BR>SELECT notes<BR>FROM titles<BR>WHERE notes LIKE ’50%% off when 100 or more copies are purchased’ <BR>&nbsp;&nbsp; ESCAPE ’%’<BR>GO</P>
<P>示例<BR>A. 使用带 % 通配符的 LIKE<BR>下例查找 authors 表中所有区号为 415 的电话号码。</P>
<P>USE pubs<BR>GO<BR>SELECT phone<BR>FROM authors<BR>WHERE phone LIKE ’415%’<BR>ORDER by au_lname<BR>GO</P>
<P>下面是结果集：</P>
<P>phone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>------------ <BR>415 658-9932 <BR>415 548-7723 <BR>415 836-7128 <BR>415 986-7020 <BR>415 836-7128 <BR>415 534-9219 <BR>415 585-4620 <BR>415 354-7128 <BR>415 834-2919 <BR>415 843-2991 <BR>415 935-4228 </P>
<P>(11 row(s) affected)</P>
<P>B. 使用带 % 通配符的 NOT LIKE<BR>下例查找 authors 表中所有区号不是 415 的电话号码。</P>
<P>USE pubs<BR>GO<BR>SELECT phone<BR>FROM authors<BR>WHERE phone NOT LIKE ’415%’<BR>ORDER BY au_lname<BR>GO</P>
<P>下面是结果集：</P>
<P>phone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>------------ <BR>503 745-6402 <BR>219 547-9982 <BR>615 996-8275 <BR>615 297-2723 <BR>707 938-6445 <BR>707 448-4982 <BR>408 286-2428 <BR>301 946-8853 <BR>801 826-0752 <BR>801 826-0752 <BR>913 843-0462 <BR>408 496-7223 </P>
<P>(12 row(s) affected)</P>
<P>C. 使用 ESCAPE 子句<BR>下例使用 ESCAPE 子句和转义符查找 mytbl2 表的 c1 列中的精确字符串 10-15%。</P>
<P>USE pubs<BR>GO<BR>IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE TABLE_NAME = ’mytbl2’)<BR>&nbsp;&nbsp; DROP TABLE mytbl2<BR>GO<BR>USE pubs<BR>GO<BR>CREATE TABLE mytbl2<BR>(<BR>&nbsp;c1 sysname<BR>)<BR>GO<BR>INSERT mytbl2 VALUES (’Discount is 10-15% off’)<BR>INSERT mytbl2 VALUES (’Discount is .10-.15 off’)<BR>GO<BR>SELECT c1 <BR>FROM mytbl2<BR>WHERE c1 LIKE ’%10-15!% off%’ ESCAPE ’!’<BR>GO</P>
<P>D. 使用 [ ] 通配符<BR>下例查找名字为 Cheryl 或 Sheryl 的作者。</P>
<P>USE pubs<BR>GO<BR>SELECT au_lname, au_fname, phone<BR>FROM authors<BR>WHERE au_fname LIKE ’[CS]heryl’<BR>ORDER BY au_lname ASC, au_fname ASC<BR>GO</P>
<P>下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。</P>
<P>USE pubs<BR>GO<BR>SELECT au_lname, au_fname, phone<BR>FROM authors<BR>WHERE au_lname LIKE ’[CK]ars[eo]n’<BR>ORDER BY au_lname ASC, au_fname ASC<BR>GO</P>
<P>&nbsp;</P>
<P>8.NOT<BR>对布尔型输入取反。</P>
<P>语法<BR>[ NOT ] boolean_expression</P>
<P>参数<BR>boolean_expression</P>
<P>是任何有效的 Microsoft? SQL Server? 布尔表达式。</P>
<P>结果类型<BR>Boolean</P>
<P>结果值<BR>NOT 反转任何布尔表达式的值。</P>
<P>注释<BR>可用 NOT 对一个表达式求反。</P>
<P>下面的表显示使用 NOT 运算符比较 TRUE 和 FALSE 值的结果。</P>
<P>&nbsp; NOT <BR>TRUE FALSE <BR>FALSE TRUE <BR>UNKNOWN UNKNOWN </P>
<P><BR>示例<BR>下面的示例查找所有预付款不超过 $5,500 的商业和心理学丛书。</P>
<P>USE pubs<BR>GO<BR>SELECT title_id, type, advance<BR>FROM titles<BR>WHERE (type = ’business’ OR type = ’psychology’)<BR>&nbsp;&nbsp; AND NOT advance &gt; $5500<BR>ORDER BY title_id ASC<BR>GO</P>
<P>下面是结果集：</P>
<P>title_id type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; advance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>-------- ------------ --------------------- <BR>BU1032&nbsp;&nbsp; business&nbsp;&nbsp;&nbsp;&nbsp; 5000.0000<BR>BU1111&nbsp;&nbsp; business&nbsp;&nbsp;&nbsp;&nbsp; 5000.0000<BR>BU7832&nbsp;&nbsp; business&nbsp;&nbsp;&nbsp;&nbsp; 5000.0000<BR>PS2091&nbsp;&nbsp; psychology&nbsp;&nbsp; 2275.0000<BR>PS3333&nbsp;&nbsp; psychology&nbsp;&nbsp; 2000.0000<BR>PS7777&nbsp;&nbsp; psychology&nbsp;&nbsp; 4000.0000</P>
<P>(6 row(s) affected)</P>
<P>&nbsp;</P>
<P>9.OR<BR>将两个条件结合起来。当在一个语句中使用多个逻辑运算符时，在 AND 运算符之后求 OR 运算符的值。但<BR>是，通过使用括号可以更改求值的顺序。</P>
<P>语法<BR>boolean_expression OR boolean_expression</P>
<P>参数<BR>boolean_expression</P>
<P>是任何返回 TRUE、FALSE 或 UNKNOWN 的有效 Microsoft? SQL Server? 表达式。</P>
<P>结果类型<BR>Boolean</P>
<P>结果值<BR>当两个条件中的任何一个为 TRUE 时，OR 返回 TRUE。 </P>
<P>注释<BR>下表显示 OR 运算符的结果。</P>
<P>&nbsp; TRUE FALSE UNKNOWN <BR>TRUE TRUE TRUE TRUE <BR>FALSE TRUE FALSE UNKNOWN <BR>UNKNOWN TRUE UNKNOWN UNKNOWN </P>
<P><BR>示例<BR>下面的示例检索某些书名，这些书具有大于 $5,500 的预付款，并且这些书籍是商业书籍或心理学书籍。如果<BR>没有括号，那么 WHERE 子句就会检索预付款超过 $5,500 的所有商业书籍或者心理学书籍。</P>
<P>USE pubs<BR>GO<BR>SELECT SUBSTRING(title, 1, 30) AS Title, type<BR>FROM titles<BR>WHERE (type = ’business’ OR type = ’psychology’) AND<BR>&nbsp;&nbsp; advance &gt; $5500<BR>ORDER BY title<BR>GO</P>
<P>下面是结果集：</P>
<P>Title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>------------------------------ ------------ <BR>Computer Phobic AND Non-Phobic psychology&nbsp;&nbsp; <BR>Life Without Fear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; psychology&nbsp;&nbsp; <BR>You Can Combat Computer Stress business&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>(3 row(s) affected)</P><img src ="http://www.cnitblog.com/piaoye12345/aggbug/3629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/piaoye12345/" target="_blank">萌芽的叶子</a> 2005-10-28 11:31 <a href="http://www.cnitblog.com/piaoye12345/articles/3629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>