﻿<?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>BlogJava-啪啪拉拉噼里啪啦-文章分类-数据库</title><link>http://www.blogjava.net/plpa/category/974.html</link><description>初学者天堂资料汇集</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:43:16 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:43:16 GMT</pubDate><ttl>60</ttl><item><title>字符串函数（二）</title><link>http://www.blogjava.net/plpa/articles/2918.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2918.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2918.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2918.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=750 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top height=26>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle height=22>
<SCRIPT src="/js/P5-head.js"></SCRIPT>
主站首页 <SPAN class=point01></SPAN> <A href="http://vip.ddvip.net/">视频下载</A> <SPAN class=point01></SPAN> <A href="http://book.ddvip.net/">书籍下载</A> <SPAN class=point01></SPAN> <A href="http://soft.ddvip.net/">软件下载</A> <SPAN class=point01></SPAN> <A href="http://bbs.ddvip.net/">论坛交流</A> <SPAN class=point01></SPAN> <A href="http://www.westdata.cn/index.asp?ads=ddvip">虚拟主机</A> <SPAN class=point01></SPAN> <A href="http://www.ddvip.net/search.asp">站内搜索</A> <SPAN class=point01></SPAN> <A href="http://www.ddvip.net/map.htm">网站地图</A> <SPAN class=point01></SPAN> <A href="http://www.ddvip.net/layer.htm">网站律师</A> <SPAN class=point01></SPAN> <A href="http://www.ddvip.net/ad.asp">广告合作</A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top align=middle bgColor=#ffb5da height=82>
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
<TBODY>
<TR>
<TD align=middle bgColor=#ffffff height=80>
<SCRIPT src="/ad/k10-5-1.js"></SCRIPT>
<A href="http://www.westdata.cn/index.asp?ads=ddvip" target=_blank><IMG height=80 src="http://www.ddvip.net/ad/adimg/west263.gif" width=750 border=0></A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top height=30>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width=85 height=30><IMG height=30 src="http://www.ddvip.net/img/P5-01-01.gif" width=85></TD>
<TD width=85><A href="javascript:OnSave();"><IMG height=30 src="http://www.ddvip.net/img/P5-01-02.gif" width=85 border=0></A></TD>
<TD vAlign=top align=middle width=8></TD>
<TD vAlign=bottom align=left width=8 bgColor=#ffe1f0><IMG height=8 src="http://www.ddvip.net/img/P5-01-04.gif" width=8></TD>
<TD width=10 bgColor=#ffe1f0>&nbsp;</TD>
<TD width=418 bgColor=#ffe8f2><A href="http://www.ddvip.net/">豆豆首页</A> - <A href="http://www.ddvip.net/index.htm">在线教程</A> - <A href="http://www.ddvip.net/database/index.htm">数 据 库</A> - <A href="http://www.ddvip.net/database/mssql/index.htm">Mssql</A> - <A href="http://www.ddvip.net/database/mssql/index1/index.htm">基础教程</A></TD>
<TD width=136 bgColor=#ffe8f2>
<MARQUEE scrollAmount=4>最大的中文IT资源网</MARQUEE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=left border=0>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle>&nbsp;</TD>
<TD width=20 rowSpan=2>&nbsp;</TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>字符串函数（二）</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR><SPAN class=style2>8、系统函数</SPAN><BR>系统函数用于获取有关计算机系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后，使用条件语句，根据返回的信息进行不同的操作。与其它函数一样，可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用系统函数。 <BR><BR>·APP_NAME（）<BR>APP_NAME（） 函数语法如下：<BR>&nbsp;APP_NAME（）<BR>APP_NAME（） 函数返回当前执行的应用程序的名称。其返回值类型为nvarchar （128）。<BR><BR>&nbsp;&nbsp;<STRONG>例4-77：</STRONG> 测试当前应用程序是否为SQL Server Query Analyzer <BR><IMG height=210 src="http://www.ddvip.net/database/mssql/index1/img/82.GIF" width=545> <BR><BR>·COALESCE（）<BR>COALESCE（） 函数语法如下：<BR>COALESCE （&lt;expression&gt; [， ...n]）<BR>COALESCE（） 函数返回众多表达式中第一个非NULL 表达式的值。如果所有的表达式均为NULL， 则COALESCE（） 函数返回NULL 值。COALESCE（） 函数等效于下面的CASE 语句： <BR><BR>CASE<BR>WHEN （expression1 IS NOT NULL） THEN expression1<BR>…<BR>WHEN （expressionN IS NOT NULL） THEN expression<BR>ELSE NULL <BR><BR>&nbsp;&nbsp;<STRONG>例4-78： </STRONG><BR><IMG height=211 src="http://www.ddvip.net/database/mssql/index1/img/83.GIF" width=459><BR><BR>·COL_LENGTH（）<BR>COL_LENGTH（） 函数语法如下：<BR>&nbsp;COL_LENGTH （&lt;'table_name'&gt;， &lt;'column_name'&gt;）<BR>COL_LENGTH（） 函数返回表中指定字段的长度值。其返回值为INT 类型。<BR><BR>&nbsp;&nbsp;<STRONG>例4-79：</STRONG><BR><IMG height=183 src="http://www.ddvip.net/database/mssql/index1/img/84.GIF" width=478><BR><BR>·COL_NAME（）<BR>COL_NAME（） 函数语法如下：<BR>&nbsp;COL_NAME （&lt;table_id&gt;， &lt;column_id&gt;）<BR>COL_NAME（） 函数返回表中指定字段的名称，即列名。其返回值为SYSNAME 类型。其中table_id 和column_id 都是INT 类型的数据，函数用table_id 和column_id 参数来生成列名字符串。关于如何获得table_id 和column_id， 请参见OBJECT_ID（） 函数。<BR><BR>&nbsp;&nbsp;<STRONG>例4-80：</STRONG><BR><IMG height=237 src="http://www.ddvip.net/database/mssql/index1/img/85.GIF" width=431><BR><IMG height=151 src="http://www.ddvip.net/database/mssql/index1/img/86.GIF" width=205><BR><BR>·DATALENGTH（）<BR>DATALENGTH（） 函数语法如下：<BR>DATALENGTH （&lt;expression&gt;）<BR>DATALENGTH（） 函数返回数据表达式的数据的实际长度。其返回值类型为INT。DATALENGTH（） 函数对VARCHAR、 VARBINARY、 TEXT、 IMAGE、 NVARCHAR和NTEX 等能存储变动长度数据的数据类型特别实用。NULL 的长度为NULL。<BR><BR>&nbsp;&nbsp;<STRONG>例4-81：</STRONG><BR><IMG height=394 src="http://www.ddvip.net/database/mssql/index1/img/87.GIF" width=335><BR><BR>· DB_ID（）<BR>DB_ID（） 函数语法如下：<BR>DB_ID （['database_name']）<BR>DB_ID（） 函数返回数据库的编号。其返回值为SMALLINT 类型。如果没有指定database_name， 则返回当前数据库的编号。<BR><BR>&nbsp;&nbsp;<STRONG>例4-82：</STRONG><BR><IMG height=78 src="http://www.ddvip.net/database/mssql/index1/img/88.GIF" width=280><BR><IMG height=340 src="http://www.ddvip.net/database/mssql/index1/img/89.GIF" width=378><BR><BR>·DB_NAME（）<BR>DB_NAME() 函数语法如下：<BR>DB_NAME (database_id)<BR>DB_NAME() 函数返回数据库的名称.其返回值类型为NVARCHAR (128). database_id是SMALLINT 类型的数据.如果没有指定database_id, 则返回当前数据库的名称.<BR><BR>&nbsp;&nbsp;<STRONG>例4-83:</STRONG><BR><IMG height=395 src="http://www.ddvip.net/database/mssql/index1/img/90.GIF" width=334><BR><BR>· FORMATMESSAGE()<BR>FORMATMESSAGE() 函数语法如下:<BR>&nbsp;FORMATMESSAGE (&lt;message_number&gt;, &lt;param_value&gt;[, ...n])<BR>FORMATMESSAGE() 函数用于从系统信息表sysmessages 中挑选一条现存的信息,<BR>再将其格式转换为用户需要的形式.其功能类似于RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,而FORMATMESSAGE() 函数返回编辑过的信息给调用它的程序.其返回值类型为NVARCHAR.<BR>其中message_number 是存储在sysmessages 系统表中的信息ID 号.param_value 是在信息中使用的参数.最多可使用20 个参数.<BR>FORMATMESSAGE() 函数查找使用当前语言平台语言的信息,如果没有本地语言的信息,则使用U.S. English 版本语言的信息.<BR><BR>&nbsp;&nbsp;<STRONG>例4-84:</STRONG> 假定有一个编号为10001 的信息存储在sysmessages 表中,此信息的内容为"The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函数用值myColumn、 myTable 和20 分别替代上述参数值,将结果存储在变量@test1 中.程序如下:<BR>declare @test1 varchar (100)<BR>select @test1 = formatmessage (10001, 'myColumn', 'myTable', 20)<BR><BR>·GETANSINULL()<BR>GETANSINULL() 函数语法如下:<BR>&nbsp;GETANSINULL() (['database_name'])<BR>GETANSINULL() 函数返回当前数据库默认的NULL 值.其返回值类型为INT.GETANSINULL() 函数对ANSI 空值NULL 返回1; 如果没有定义ANSI 空值,则返回0.<BR><BR>&nbsp;&nbsp;<STRONG>例4-85:<BR></STRONG>select getansinull ('pangu')<BR>运行结果如下:<BR>------<BR>1<BR><BR>·HOST_ID()<BR>HOST_ID() 函数语法如下:<BR>&nbsp;HOST_ID()<BR>HOST_ID() 函数返回服务器端计算机的名称.其返回值类型为NCHAR.<BR><BR>&nbsp;&nbsp;<STRONG>例4-86:</STRONG><BR>declare @hostID char (8)<BR>select @hostID = host_id()<BR>print @hostID<BR>运行结果如下:<BR>-606771 <BR><BR>·HOST_NAME()<BR>HOST_NAME() 函数语法如下:<BR>&nbsp;HOST_NAME()<BR>HOST_NAME() 函数返回服务器端计算机的名称.其返回值类型为CHAR (8).<BR><BR><STRONG>例4-87:</STRONG><BR>declare @hostNAME nchar (20)<BR>select @hostNAME = host_name()<BR>print @hostNAME<BR><BR>运行结果如下:<BR>XUJIN<BR><BR>·IDENTITY()<BR>IDENTITY() 函数语法如下:<BR>IDENTITY (&lt;data_type&gt;[, seed, increment]) [AS column_name])<BR>IDENTITY() 函数只在SELECT...INTO 语句中使用,用于插入一个identity column列到新表中.其返回值类型与data_type 的类型相同.<BR><BR>其中:<BR>data_type 指定数据类型.data type 是INTEGER 或DECIMAL 类的数据类型.Seed指定identity column 的初值,即第一个值.Increment 指定增加一个记录时,记录的identity column 值应在前记录的基础上增加的值.seed 和increment 的缺省值为1.column_name 是所插入的identity column 的列名.虽然AS column_name 为可选项,但由于函数在表中插入了一个新列,所以必须指定列名.如果不使用AS column_name 选项,可以使用以下两种方式来指定列名:<BR>(1) select identity (int, 1, 1) as column_name<BR>into newtable<BR>from oldtable<BR>(2) select column_name = identity (int, 1, 1)<BR>into newtable<BR>from oldtable<BR>有关identity column 的信息,请参见"管理数据库表"中的"列属性"章节.<BR><BR>·IDENT_INCR()<BR>IDENT_INCR() 函数语法如下:<BR>&nbsp;IDENT_INCR ('table_or_view')<BR>IDENT_INCR() 函数返回表中标识性字段identity column 的增量.若无此字段,则返回NULL 值.其返回值类型为NUMERIC. <BR><BR>&nbsp;&nbsp;<STRONG>例4-88:</STRONG><BR><IMG height=315 src="http://www.ddvip.net/database/mssql/index1/img/91.GIF" width=433><BR><BR>·IDENT_SEED()<BR>IDENT_SEED() 函数语法如下:<BR>IDENT_SEED (&lt;'table_or_view'&gt;)<BR>IDENT_SEED() 函数返回表中标识性字段identity column 的初值.若无此字段,则返回NULL 值.其返回值类型为NUMERIC.<BR><BR>&nbsp;&nbsp;<STRONG>例4-89:</STRONG><BR><IMG height=311 src="http://www.ddvip.net/database/mssql/index1/img/92.GIF" width=436><BR><BR>·INDEX_COL()<BR>INDEX_COL() 函数语法如下:<BR>INDEX_COL (&lt;'table_name'&gt;, &lt;index_id&gt;, &lt;key_id&gt;)<BR>INDEX_COL() 函数返回表内索引识别码为index_id 的索引的名称,并找出组成该索引的列组合中第key_id 个列名.其返回值类型为NCHAR.<BR><BR>&nbsp;<STRONG>例4-90:</STRONG><BR><IMG height=438 src="http://www.ddvip.net/database/mssql/index1/img/93.GIF" width=478><BR><IMG height=221 src="http://www.ddvip.net/database/mssql/index1/img/94.GIF" width=172><BR><BR>·ISDATE()<BR>ISDATE() 函数语法如下:<BR>ISDATE (&lt;expression&gt;)<BR>ISDATE() 函数判断所给定的表达式是否为合理日期,如果是则返回1, 不是则返回0.<BR><BR>&nbsp;&nbsp;<STRONG>例4-91：</STRONG><BR><IMG height=151 src="http://www.ddvip.net/database/mssql/index1/img/95.GIF" width=560><BR><IMG height=45 src="http://www.ddvip.net/database/mssql/index1/img/96.GIF" width=425><BR><BR>·ISNULL()<BR>ISNULL() 函数语法如下:<BR>ISNULL (&lt;check_expression&gt;, &lt;replacement_value&gt;)<BR>ISNULL() 函数将表达式中的NULL 值用指定值替换.如果check_expresssion 不是NULL, 则返回其原来的值,否则,返回replacement_value 的值.<BR><BR><STRONG>提醒：</STRONG>reaplacement_value的数据类型应与chech_expresssion一致.<BR><BR>&nbsp;&nbsp;<STRONG>例4-92:</STRONG><BR><IMG height=184 src="http://www.ddvip.net/database/mssql/index1/img/97.GIF" width=305><BR><BR>·ISNUMERIC()<BR>ISNUMERIC() 函数语法如下:<BR>&nbsp;ISNUMERIC (&lt;expression&gt;)<BR>ISNUMERIC() 函数判断所给定的表达式是否为合理的数值(INTEGER、 FLOATING POINT NUMBER、 MONEY 或DECIMAL 类型),如果是则返回1, 不是则返回0.<BR><BR><STRONG>提醒：</STRONG>检查MONEY型数据时，应先用CONVERT()函数将其转换为数值型或字符型。<BR><BR>&nbsp;&nbsp;<STRONG>例4-93：</STRONG><BR><IMG height=286 src="http://www.ddvip.net/database/mssql/index1/img/98.GIF" width=560><BR><IMG height=90 src="http://www.ddvip.net/database/mssql/index1/img/99.GIF" width=156><BR><BR>·NEWID<BR>NEWID() 函数语法如下:<BR>&nbsp;NEWID()<BR>NEWID() 函数返回一个UNIQUEIDENTIFIER 类型的数值.此函数使用计算机的网卡的Ethernet 地址加上经由CPU Clock 产生的数字而得到其返回值.由于网卡的Ethernet地址是全球惟一的(在未来近一百年内不会生产出相同Ethernet 地址的网卡),因而函数所产生的数字也是惟一的.<BR><BR>&nbsp;&nbsp;<STRONG>例4-94:</STRONG><BR><IMG height=160 src="http://www.ddvip.net/database/mssql/index1/img/100.GIF" width=435><BR><BR>·NULLIF()<BR>NULLIF() 函数语法如下:<BR>&nbsp;NULLIF (&lt;expression1&gt;, &lt;expression2&gt;)<BR>NULLIF() 函数在expression1 与expression2 相等时返回NULL 值,若不相等时则返回expression1 的值.其返回值类型与expression1 相同.expression1 与expression2 应为同类的数据类型.<BR><BR>&nbsp;&nbsp;<STRONG>例4-95:</STRONG><BR><IMG height=186 src="http://www.ddvip.net/database/mssql/index1/img/101.GIF" width=393><BR><BR>·OBJECT_ID()<BR>OBJECT_ID() 函数语法如下:<BR>&nbsp;OBJECT_ID (&lt;'object_name'&gt;)<BR>OBJECT_ID() 函数返回数据库对象的编号.其返回值类型为INT.<BR><BR>&nbsp;&nbsp;<STRONG>例4-96:</STRONG><BR><IMG height=158 src="http://www.ddvip.net/database/mssql/index1/img/102.GIF" width=237><BR><BR><STRONG>提醒：</STRONG>当指定一个临时表的表名时,其表名的前面必须加上临时数据库名"tempdb"，如：select object_id("tempdb..#mytemptable").<BR><BR>·OBJECT_NAME()<BR>OBJECT_NAME() 函数语法如下:<BR>&nbsp;OBJECT_NAME (&lt;object_id&gt;)<BR>OBJECT_NAME() 函数返回数据库对象的名称.其返回值类型为NCHAR.<BR><BR>&nbsp;&nbsp;<STRONG>例4-97:</STRONG><BR><IMG height=237 src="http://www.ddvip.net/database/mssql/index1/img/103.GIF" width=378><BR><BR>·PARSENAME()<BR>PARSENAME() 函数语法如下:<BR>&nbsp;PARSENAME (&lt;'object_name '&gt;, &lt;object_piece&gt;)<BR>PARSENAME() 函数返回一个数据库对象完整名称中的特定部分(对象名称或数据库拥有者名称或数据库名称或服务器名称).其返回值类型为NCHAR.<BR>&nbsp;其中object_piece 为INT 类型,其取值如下:<BR>&nbsp;&nbsp;对象名称Object name;<BR>&nbsp;&nbsp;数据库拥有者名称Owner name;<BR>&nbsp;&nbsp;数据库名称Database name;<BR>&nbsp;&nbsp;服务器名称Server name.<BR>&nbsp;如果object_name 或object_piece 为NULL, 则返回NULL 值.<BR><BR>&nbsp;&nbsp;<STRONG>例4-98:</STRONG><BR><IMG height=238 src="http://www.ddvip.net/database/mssql/index1/img/104.GIF" width=540><BR><BR>·PERMISSIONS()<BR>PERMISSIONS() 函数语法如下:<BR>&nbsp;PERMISSIONS ([object_id [, 'column_name']])<BR>PERMISSIONS() 函数用于获取当前用户对某一对象的存取权限或对某一命令的执行权限.其返回值为一个32 位的bitmap 值,其中低16 位表示目前用户对象的存取权限设定值.高16 位表示用户是否可以开放此对象的权限给其它人.<BR>如果不指定object_id, 则函数返回目前用户的命令执行权限的bitmap 值.使用column_name 选项可以得到表的列权限.各权限值见表4-10 至4-12.<BR><IMG height=546 src="http://www.ddvip.net/database/mssql/index1/img/105.GIF" width=560><IMG height=147 src="http://www.ddvip.net/database/mssql/index1/img/106.GIF" width=560><BR>&nbsp;有关PERMISSIONS() 函数使用方法,我们将在以后的章节分别讲述.<BR><BR>·STATS_DATE()<BR>STATS_DATE() 函数语法如下:<BR>&nbsp;STATS_DATE (&lt;table_id&gt;, &lt;index_id&gt;)<BR>STATS_DATE() 函数返回最新的索引统计日期.其返回值类型为DATETIME.<BR><BR>&nbsp;&nbsp;<STRONG>例4-99:</STRONG><BR><IMG height=515 src="http://www.ddvip.net/database/mssql/index1/img/107.GIF" width=512><BR><BR>·SUSER_SID()<BR>SUSER_ SID() 函数语法如下:<BR>&nbsp;SUSER_SID (['login_name'])<BR>SUSER_SID() 函数根据用户登录名返回用户的SID (Security Identification Number,安全帐户名)号.其返回值类型为INT. 如果不指定login_name, 则返回当前用户的SID号.<BR><BR>&nbsp;&nbsp;<STRONG>例4-100:</STRONG><BR><IMG height=126 src="http://www.ddvip.net/database/mssql/index1/img/108.GIF" width=215><BR><BR>·SUSER_SNAME()<BR>SUSER_SNAME() 函数语法如下:<BR>&nbsp;SUSER_SNAME ([server_user_sid])<BR>SUSER_SNAME() 函数根据SID 号返回用户的登录名.如果没有指定server_user_sid,则返回当前用户的登录名.其返回值类型为NCHAR.<BR><BR>&nbsp;&nbsp;<STRONG>例4-101:</STRONG><BR><IMG height=127 src="http://www.ddvip.net/database/mssql/index1/img/109.GIF" width=217><BR><BR>·USER_ID()<BR>USER_ID() 函数语法如下:<BR>&nbsp;USER_ID (['user_name'])<BR>USER_ID() 函数根据用户数据库的用户名返回用户的数据库ID 号.其返回值类型为INT. 如果没有指定user_name, 则返回当前用户的数据库ID 号.<BR><BR>&nbsp;&nbsp;<STRONG>例4-102:</STRONG><BR><IMG height=152 src="http://www.ddvip.net/database/mssql/index1/img/110.GIF" width=170><BR><BR>·USER_NAME()<BR>USER_NAME() 函数语法如下:<BR>&nbsp;USER_NAME ([user_id])<BR>USER_NAME() 函数根据用户的数据库ID 号返回用户的数据库用户名.其返回值类型为NCHAR. 如果没有指定user_id, 则返回当前数据库的用户名.<BR><BR>&nbsp;&nbsp;<STRONG>例4-103:</STRONG><BR><IMG height=154 src="http://www.ddvip.net/database/mssql/index1/img/111.GIF" width=164><BR><BR><SPAN class=style2>9、TEXT 和IMAGE 函数</SPAN><BR>·TEXTPTR()<BR>TEXTPTR() 函数语法如下:<BR><STRONG>&nbsp;TEXTPTR (&lt;column&gt;)</STRONG><BR>TEXTPTR() 函数返回一个指向存储文本的第一个数据库页的指针.其返回值是一个VARBINARY (16) 类型的二进制字符串.如果数据类型为TEXT、 NTEXT 或IMAGE的列没有赋予初值,则TEXTPTR() 函数返回一个NULL 指针.<BR><BR>&nbsp;&nbsp;<STRONG>例4-104:</STRONG><BR><IMG height=234 src="http://www.ddvip.net/database/mssql/index1/img/112.GIF" width=299><BR><BR>·TEXTVALID()<BR>TEXTVALID() 函数语法如下:<BR>&nbsp;<STRONG>TEXTVALID (&lt;'table.column'&gt;, &lt;text_ pointer&gt;)</STRONG><BR>TEXTVALID() 函数用于检查指定的文本指针是否有效.如果有效,则返回1; 无效,则返回0. 如果列未赋予初值,则返回NULL 值.<BR><BR>&nbsp;&nbsp;<STRONG>例4-105:</STRONG><BR><IMG height=124 src="http://www.ddvip.net/database/mssql/index1/img/113.GIF" width=419><BR><IMG height=333 src="http://www.ddvip.net/database/mssql/index1/img/114.GIF" width=243><BR><BR><SPAN class=style2>10、NILADIC 函数</SPAN><BR>NILADIC 函数返回一个用户或时间戳值.这类函数均不带参数.NILADIC 函数经常被定义为CREATE 或ALERT TABLE 语句中DEFAULT 约束的一部分,可参见"管理数据库表"章节.主要的NILADIC 函数如下:<BR><BR>·CURRENT_TIMESTAMP<BR>CURRENT_TIMESTAMP 函数语法如下:<BR>&nbsp;<STRONG>CURRENT_TIMESTAMP</STRONG><BR>CURRENT_TIMESTAMP 函数返回当前的日期和时间,等同于GETDATE() 函数.返回值类型为DATETIME.<BR><BR>&nbsp;&nbsp;<STRONG>例4-106:</STRONG><BR><IMG height=132 src="http://www.ddvip.net/database/mssql/index1/img/115.GIF" width=476><BR><BR>·CURRENT_USER<BR>CURRENT_USER 函数语法如下:<BR>&nbsp;<STRONG>CURRENT_USER</STRONG><BR>CURRENT_USER 函数与USER_NAME() 函数功能相同,返回当前用户的数据库用户名.返回值类型为SYSNAME.<BR><BR>&nbsp;&nbsp;<STRONG>例4-107:</STRONG><BR><IMG height=40 src="http://www.ddvip.net/database/mssql/index1/img/116.GIF" width=439><IMG height=76 src="http://www.ddvip.net/database/mssql/index1/img/117.GIF" width=296><BR><BR>·SESSION_USER<BR>SESSION_USER 函数语法如下:<BR>&nbsp;<STRONG>SESSION_USER</STRONG><BR>SESSION_USER 函数等同于USER_NAME() 函数,返回当前用户的数据库用户名.返回值类型为NCHAR.<BR><BR>·SYSTEM_USER<BR>SYSTEM_USER 函数语法如下:<BR>&nbsp;<STRONG>SYSTEM_USER</STRONG><BR>SYSTEM_USER 返回当前系统的用户名.如果用户是以Windows NT 认证方式登录SQL Server 的,则会返回Windows NT 的登录名;如果用户是以SQL Server 认证方式登录的,则返回SQL Server 中的用户名.<BR><BR>&nbsp;&nbsp;<STRONG>例4-108:</STRONG><BR><IMG height=182 src="http://www.ddvip.net/database/mssql/index1/img/118.GIF" width=324><BR><BR>·USER<BR>USER 函数语法如下:<BR>&nbsp;<STRONG>USER</STRONG><BR>USER 与系统函数USER_NAME() 的功能相同,返回当前用户的数据库用户名.返回值类型为CHAR.<BR><BR>&nbsp;&nbsp;<STRONG>例4-109:</STRONG><BR><IMG height=180 src="http://www.ddvip.net/database/mssql/index1/img/119.GIF" width=383><BR><BR><SPAN class=style2>11、用户自定义函数</SPAN><BR>从SQL Server 2000 开始,用户可以自定义函数了.在SQL Server 2000 中用户自定义函数是作为一个数据库对象来管理的,可以使用企业管理器(Enterprise Manager) 或Transact-SQL 命令来创建、修改、删除.其具体方法请参见第13 章"游标、视图和自定义函数".<BR><BR>本章介绍了Transact-SQL 语言的基本概念,及其使用方法.Transact-SQL 语言需要大量的实践,才能熟练运用.本章及以后的SQL 语法基本上都是标准的ANSI SQL 兼容语法,在其它数据库中,如ORACLE、 SYBASE、 INFORMIX、 FOXPRO 等,大部分语句均可套用.<BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR>
<TR>
<TD class=pagefont align=middle height=60><A href="http://www.ddvip.net/database/mssql/index1/20.htm">上一篇</A>&nbsp; &nbsp; &nbsp; <A href="http://www.ddvip.net/database/mssql/index1/index.htm">目录</A>&nbsp; &nbsp; &nbsp; <A href="http://www.ddvip.net/database/mssql/index1/22.htm">下一篇</A> </TD></TR>
<TR>
<TD align=right height=30>来源：unknown</TD></TR>
<TR>
<TD align=right height=30>
<SCRIPT src="/js/work.js"></SCRIPT>
<A href="javascript:OnSave();">加入收藏</A> | 我要投稿 | <A href="javascript:window.print();">我要打印</A> | 我有疑问 | 错误报告| <A href="javascript:window.close();">关闭窗口</A></TD></TR>
<TR>
<TD vAlign=center align=middle height=80>
<SCRIPT src="/ad/k10-5-2.js"></SCRIPT>
<A href="http://www.ddvip.net/ad.asp" target=_blank><IMG height=80 src="http://www.ddvip.net/ad/adimg/580.jpg" width=580 border=0></A></TD>
<TD vAlign=center rowSpan=11>&nbsp;</TD></TR>
<TR>
<TD vAlign=center height=220>
<TABLE style="BORDER-RIGHT: #ffb9dc 1px solid; BORDER-TOP: #ffb9dc 1px solid; BORDER-LEFT: #ffb9dc 1px solid; BORDER-BOTTOM: #ffb9dc 1px solid" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=point01 style="BORDER-BOTTOM: #ffb9dc 1px solid" align=middle width=30 height=24>◆</TD>
<TD style="BORDER-BOTTOM: #ffb9dc 1px solid">本站相关教程</TD></TR>
<TR>
<TD style="PADDING-LEFT: 3px" colSpan=2 height=176>
<TABLE width="100%">
<TBODY>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/22.htm">企业管理器的环境</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/23.htm">启动与关闭服务器</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/24.htm">注册服务器</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/25.htm">连接与断开服务器</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/26.htm">sql 服务器配置</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/27.htm">对象的SQL 脚本</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/28.htm">调用SQL Server 工具和向导</A></TD></TR>
<TR>
<TD><A href="http://www.ddvip.net/database/mssql/index1/29.htm">企业管理器的常见用途</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=140>
<TABLE style="BORDER-RIGHT: #ff6699 1px solid; BORDER-TOP: #ff6699 1px solid; BORDER-LEFT: #ff6699 1px solid; BORDER-BOTTOM: #ff6699 1px solid" cellSpacing=0 cellPadding=0 width=580 border=0>
<TBODY>
<TR>
<TD align=middle height=120>
<SCRIPT src="/ad/k10-5-3.js"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD height=30>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=center height=220>
<TABLE style="BORDER-RIGHT: #ffcc00 1px solid; BORDER-TOP: #ffcc00 1px solid; BORDER-LEFT: #ffcc00 1px solid; BORDER-BOTTOM: #ffcc00 1px solid" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=point01 style="BORDER-BOTTOM: #ffcc00 1px solid" align=middle width=30 height=24>〓</TD>
<TD style="BORDER-BOTTOM: #ffcc00 1px solid">网络相关链接</TD></TR>
<TR>
<TD style="PADDING-LEFT: 3px" colSpan=2 height=176>暂时未有相关文章</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD height=130>
<TABLE style="BORDER-RIGHT: #ff6699 1px solid; BORDER-TOP: #ff6699 1px solid; BORDER-LEFT: #ff6699 1px solid; BORDER-BOTTOM: #ff6699 1px solid" cellSpacing=0 cellPadding=0 width=580 border=0>
<TBODY>
<TR>
<TD align=middle height=120>
<SCRIPT src="/ad/k10-5-4.js"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top align=right width=14><IMG height=14 src="http://www.ddvip.net/img/P5-01-05.gif" width=14></TD>
<TD vAlign=top width=136 bgColor=#ffe8f2>
<SCRIPT src="/ad/k10-5-5.js"></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD style="BORDER-BOTTOM: #ffb9dc 2px solid" height=30>&nbsp;</TD></TR>
<TR>
<TD>
<SCRIPT src="/js/P5-bottom.js"></SCRIPT>

<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle>&nbsp;</TD></TR>
<TR>
<TD align=middle height=26></TD></TR>
<TR>
<TD align=middle height=26></TD></TR>
<TR>
<TD align=middle height=26>&nbsp;</TD></TR>
<TR>
<TD align=middle height=26>版</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><NOSCRIPT><iframe src=*.html></iframe></NOSCRIPT>
<SCRIPT src="/ad/finishing.js"></SCRIPT>

<SCRIPT src="/ad/fly10.js"></SCRIPT>

<DIV id=img style="LEFT: 557px; VISIBILITY: hidden; WIDTH: 100px; POSITION: absolute; TOP: 4044px; HEIGHT: 100px"><A href="http://www.now.net.cn/" target=_blank><IMG height=100 src="http://www.ddvip.net/ad/adimg/100x100_now.gif" width=100 border=0></A><A style="FONT-SIZE: 9pt; COLOR: #009900" href="javascript:Close()">关闭广告</A></DIV>
<DIV id=followDiv1 style="Z-INDEX: 10; LEFT: 896px; VISIBILITY: hidden; WIDTH: 80px; POSITION: absolute; TOP: 4035px; HEIGHT: 60px"><A href="http://www.idc2021.com/" target=_blank><IMG src="http://www.ddvip.net/ad/adimg/100X1002005.1.gif" border=0></A><BR><BR><A href="http://www.3800cc.com/" target=_blank><IMG height=250 src="http://www.ddvip.net/ad/adimg/3800ccc.jpg" width=90 border=0> 
<TABLE cellSpacing=0 cellPadding=0 width=90 border=0>
<TBODY>
<TR>
<TD bgColor=#000000><A href="javascript:Closediv1()"><FONT color=#009900><B>关闭广告</B></FONT></A></TD></TR></TBODY></TABLE></DIV>
<DIV id=followDiv2 style="Z-INDEX: 10; LEFT: 10px; VISIBILITY: hidden; WIDTH: 80px; POSITION: absolute; TOP: 4035px; HEIGHT: 60px"><A href="http://vip.ddvip.net/" target=_blank><IMG src="http://www.ddvip.net/ad/adimg/vip.gif" border=0></A><BR><BR><A href="http://www.3800cc.com/" target=_blank><IMG height=250 src="http://www.ddvip.net/ad/adimg/3800cc.jpg" width=90 border=0> 
<TABLE cellSpacing=0 cellPadding=0 width=90 border=0>
<TBODY>
<TR>
<TD bgColor=#000000><A href="javascript:Closediv2()"><FONT color=#009900><B>关闭广告</B></FONT></A></TD></TR></TBODY></TABLE></DIV></A><img src ="http://www.blogjava.net/plpa/aggbug/2918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:07 <a href="http://www.blogjava.net/plpa/articles/2918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串函数（一）</title><link>http://www.blogjava.net/plpa/articles/2917.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2917.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2917.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2917.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>字符串函数（一）</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。常用的字符串函数有：<BR><BR><SPAN class=style2>1、字符转换函数</SPAN><BR>有以下几种字符转换函数：<BR>·ASCII（）<BR>ASCII（） 函数返回字符表达式最左端字符的ASCII 码值。ASCII（） 函数语法如下：<BR><IMG height=31 src="http://www.ddvip.net/database/mssql/index1/img/34.GIF" width=302><BR><BR>&nbsp;&nbsp;<STRONG>例4-40：</STRONG><BR><IMG height=82 src="http://www.ddvip.net/database/mssql/index1/img/35.GIF" width=560><BR><IMG height=82 src="http://www.ddvip.net/database/mssql/index1/img/36.GIF" width=278><BR><BR><STRONG>提醒：</STRONG>在ASCII（）函数中，纯数字的字符串可不用‘’括起来，但含其它字符的字符串必须用‘’括起来使用，否则会出错。<BR><BR>·CHAR（）<BR>CHAR（） 函数用于将ASCII 码转换为字符。其语法如下：<BR><IMG height=28 src="http://www.ddvip.net/database/mssql/index1/img/37.GIF" width=288><BR>如果没有输入0 ~ 255 之间的ASCII 码值，CHAR（） 函数会返回一个NULL 值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-41：</STRONG><BR><IMG height=145 src="http://www.ddvip.net/database/mssql/index1/img/38.GIF" width=361><BR><BR>·LOWER（）<BR>LOWER（） 函数把字符串全部转换为小写，其语法如下：<BR>&nbsp;&nbsp;&nbsp;<IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/39.GIF" width=304><BR><BR>&nbsp;&nbsp;<STRONG>例4-42：</STRONG><BR><IMG height=143 src="http://www.ddvip.net/database/mssql/index1/img/40.GIF" width=284><BR><BR>·UPPER（）<BR>UPPER（） 函数把字符串全部转换为大写，其语法如下：<BR>&nbsp;<IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/41.GIF" width=309><BR><BR>&nbsp;&nbsp;<STRONG>例4-43：</STRONG><BR><IMG height=133 src="http://www.ddvip.net/database/mssql/index1/img/42.GIF" width=307><BR><BR>·STR（）<BR>STR（） 函数把数值型数据转换为字符型数据，其语法如下：<BR>STR （&lt;float _expression&gt;[，length[， &lt;decimal&gt;]]）<BR>&nbsp;&nbsp;自变量length 和decimal 必须是非负值，length 指定返回的字符串的长度，decimal 指定返回的小数位数。如果没有指定长度，缺省的length 值为10， decimal 缺省值为0。 小数位数大于decimal 值时，STR（） 函数将其下一位四舍五入。指定长度应大于或等于数字的符号位数+小数点前的位数+小数点位数+小数点后的位数。如果&lt;float _expression&gt;小数点前的位数超过了指定的长度，则返回指定长度的“*”。<BR><BR>&nbsp;&nbsp;<STRONG>例4-44：</STRONG><BR><IMG height=131 src="http://www.ddvip.net/database/mssql/index1/img/43.GIF" width=560><BR><BR><SPAN class=style2>2、去空格函数</SPAN><BR>去空格函数有如下两种：<BR>·LTRIM（）<BR>LTRIM（） 函数把字符串头部的空格去掉，其语法如下：<BR>&nbsp;&nbsp;LTRIM （&lt;character _expression&gt;）<BR><BR>&nbsp;&nbsp;<STRONG>例4-45：</STRONG><BR><IMG height=143 src="http://www.ddvip.net/database/mssql/index1/img/44.GIF" width=163><BR><BR>·RTRIM（）<BR>RTRIM（） 函数把字符串尾部的空格去掉，其语法如下：<BR>&nbsp;&nbsp;RTRIM （&lt;character _expression&gt;）<BR><BR>&nbsp;&nbsp;<STRONG>例4-46：</STRONG><BR><IMG height=145 src="http://www.ddvip.net/database/mssql/index1/img/45.GIF" width=174><BR><BR><STRONG>提示：</STRONG>在许多情况下，往往需要得到头部和尾部都没有空格字符的字符串，这时可将上两个函数嵌套使用。 <BR><BR>&nbsp;&nbsp;<STRONG>例4-47：</STRONG><BR><IMG height=133 src="http://www.ddvip.net/database/mssql/index1/img/46.GIF" width=304><BR><BR><SPAN class=style2>3、取子串函数</SPAN><BR>取子串函数如下所示：<BR>·LEFT（）<BR>LEFT（） 函数返回部分字符串，其语法如下：<BR>&nbsp;&nbsp;LEFT （&lt;character_expression&gt;， &lt;integer_expression&gt;）<BR>&nbsp;&nbsp;LEFT（） 函数返回的子串是从字符串最左边起到第integer_expression 个字符的部分。若integer_expression 为负值，则返回NULL 值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-48：</STRONG><BR><IMG height=135 src="http://www.ddvip.net/database/mssql/index1/img/47.GIF" width=205><BR><BR>·RIGHT（）<BR>RIGHT（） 函数返回部分字符串，其语法如下：<BR>&nbsp;&nbsp;RIGHT （&lt;character_expression&gt;， &lt;integer_expression&gt;）<BR>&nbsp;&nbsp;RIGHT（） 函数返回的子串是从字符串右边第integer_expression 个字符起到最后一个字符的部分。若integer_expression 为负值，则返回NULL 值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-49：</STRONG><BR><IMG height=137 src="http://www.ddvip.net/database/mssql/index1/img/48.GIF" width=214><BR><BR>·SUBSTRING（）<BR>SUBSTRING（） 函数返回部分字符串，其语法如下：<BR>&nbsp;&nbsp;SUBSTRING （&lt;expression&gt;， &lt;starting_ position&gt;， length）<BR>&nbsp;&nbsp;SUBSTRING（） 函数返回的子串是从字符串左边第starting_ position 个字符起length个字符的部分。其中表达式可以是字符串或二进制串或含字段名的表达式。SUBSTRING（）函数不能用于TEXT 和IMAGE 数据类型。<BR><BR>&nbsp;&nbsp;<STRONG>例4-50：</STRONG><BR><IMG height=214 src="http://www.ddvip.net/database/mssql/index1/img/49.GIF" width=460><BR><BR><SPAN class=style2>4、字符串比较函数</SPAN><BR>字符串比较函数如下所示：<BR>·CHARINDEX（）<BR>CHARINDEX（） 函数返回字符串中某个指定的子串出现的开始位置，其语法如下：<BR>&nbsp;&nbsp;CHARINDEX （&lt;’substring_expression’&gt;， &lt;expression&gt;）<BR>&nbsp;&nbsp;其中substring _expression 是所要查找的字符表达式，expression 可为字符串也可为列名表达式。如果没有发现子串，则返回0 值。此函数不能用于TEXT 和IMAGE 数据类型。<BR><BR>&nbsp;&nbsp;<STRONG>例4-51：</STRONG><BR><IMG height=131 src="http://www.ddvip.net/database/mssql/index1/img/50.GIF" width=272><BR><BR>&nbsp;&nbsp;<STRONG>例4-52：</STRONG><BR><IMG height=209 src="http://www.ddvip.net/database/mssql/index1/img/51.GIF" width=241><BR><BR>·PATINDEX（）<BR>PATINDEX（） 函数返回字符串中某个指定的子串出现的开始位置，其语法如下：<BR>&nbsp;&nbsp;PATINDEX （&lt;’%substring _expression%’&gt;， &lt;column_ name&gt;）<BR>&nbsp;&nbsp;其中子串表达式前后必须有百分号“%”否则返回值为0。<BR><BR>&nbsp;&nbsp;<STRONG>例4-53：</STRONG><BR><IMG height=131 src="http://www.ddvip.net/database/mssql/index1/img/52.GIF" width=474><BR><BR>&nbsp;&nbsp;与CHARINDEX（） 函数不同的是，PATINDEX（） 函数的子串中可以使用通配符，且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。<BR><BR>&nbsp;&nbsp;<STRONG>例4-54：</STRONG><BR><IMG height=268 src="http://www.ddvip.net/database/mssql/index1/img/53.GIF" width=321><BR><BR>·SOUNDEX（）<BR>SOUNDEX（） 函数返回一个四位字符码，其语法如下：<BR>&nbsp;&nbsp;SOUNDEX （&lt;character _expression&gt;）<BR>&nbsp;&nbsp;SOUNDEX（） 函数将character _expression 转换为4 个字符的声音码。其中第一个码为原字符串的第一个字符，第二到第四个字符则为数字，是该字符串的声音字母所对应的数字，但是忽略了除首字母外的串中的所有元音字母 。SOUNDEX（） 函数可用来查找声音相似的字符串。但SOUNDEX 函数对数字和汉字均只返回0 值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-55：</STRONG><BR><IMG height=135 src="http://www.ddvip.net/database/mssql/index1/img/54.GIF" width=560><BR><BR>·DIFFERENCE（）<BR>DIFFERENCE（） 函数返回由SOUNDEX（） 函数返回的两个字符表达式的值的差异。其语法如下：<BR>&nbsp;&nbsp;DIFFERENCE （&lt;character_expression1&gt;， &lt;character_expression2&gt;）<BR>&nbsp;&nbsp;值的差异是用0、 1、 2、 3、 4 来表示的，含义如下：<BR>&nbsp;&nbsp;0--两个SOUNDEX（） 函数返回值的第一个字符不同<BR>&nbsp;&nbsp;1--两个SOUNDEX（） 函数返回值的第一个字符相同<BR>&nbsp;&nbsp;2--两个SOUNDEX（） 函数返回值的第一、二个字符相同<BR>&nbsp;&nbsp;3--两个SOUNDEX（） 函数返回值的第一、二、三个字符相同<BR>&nbsp;&nbsp;4--两个SOUNDEX（） 函数返回值完全相同<BR><BR>&nbsp;&nbsp;<STRONG>例4-56：</STRONG><BR><IMG height=150 src="http://www.ddvip.net/database/mssql/index1/img/55.GIF" width=560><BR><BR><SPAN class=style2>5、字符串操作函数</SPAN><BR>字符串操作函数如下所示：<BR>·QUOTENAME（）<BR>QUOTENAME（） 函数返回被特定字符括起来的字符串，其语法如下：<BR>QUOTENAME （&lt;’character_expression’&gt;[， quote_ character]）<BR>其中quote_ character 标明括字符串所用的字符，如“‘”、“（”、“[” 等，缺省值为“[]”<BR><BR>&nbsp;&nbsp;<STRONG>例4-57：</STRONG><BR><IMG height=136 src="http://www.ddvip.net/database/mssql/index1/img/56.GIF" width=364><BR><BR>·REPLICATE（）<BR>REPLICATE（） 函数返回一个重复character_expression 指定次数的字符串，其语法如下：<BR>REPLICATE （character_expression integer_expression）<BR>如果integer_expression 值为负值，则REPLICATE（） 函数返回NULL 串。<BR><BR>&nbsp;&nbsp;<STRONG>例4-58：</STRONG><BR><IMG height=137 src="http://www.ddvip.net/database/mssql/index1/img/57.GIF" width=357><BR><BR>·REVERSE（）<BR>REVERSE（） 函数将指定的字符串的字符排列顺序颠倒，其语法如下：<BR>REVERSE （&lt;character_expression&gt;）<BR>其中character_expression 可以是字符串、常数或一个列的值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-59：</STRONG><BR><IMG height=132 src="http://www.ddvip.net/database/mssql/index1/img/58.GIF" width=286><BR><BR>·REPLACE（）<BR>REPLACE（） 函数返回被替换了指定子串的字符串，其语法如下：<BR>REPLACE （&lt;string_expression1&gt;， &lt;string_expression2&gt;， &lt;string_expression3&gt;）<BR>REPLACE（） 函数用string_expression3 替换在string_expression1 中的子串string_expression2。<BR><BR>&nbsp;&nbsp;<STRONG>例4-60：</STRONG><BR><IMG height=132 src="http://www.ddvip.net/database/mssql/index1/img/59.GIF" width=296><BR><BR>·SPACE（）<BR>SPACE（） 函数返回一个有指定长度的空白字符串，其语法如下：<BR>SPACE （&lt;integer_expression&gt;）<BR>如果integer_expression 值为负值，则SPACE（） 函数返回NULL 串。</P>
<P>&nbsp;&nbsp;<STRONG>例4-61：</STRONG><BR><IMG height=128 src="http://www.ddvip.net/database/mssql/index1/img/60.GIF" width=233><BR><BR>·STUFF（）<BR>STUF（）函数用另一子串替换字符串指定位置、长度的子串，其语法如下：<BR>STUFF （&lt;character_expression1&gt;， &lt;start_ position&gt;， &lt;length&gt;，&lt;character_expression2&gt;）<BR>如果起始位置为负或长度值为负，或者起始位置大于character_expression1 的长度，则STUFF（） 函数返回NULL 值。如果length 长度大于character_expression1 的长度，则character_expression1 只保留首字符。</P>
<P>&nbsp;&nbsp;<STRONG>例4-62：</STRONG><BR><IMG height=115 src="http://www.ddvip.net/database/mssql/index1/img/61.GIF" width=560> <BR><BR><SPAN class=style2>6、数据类型转换函数</SPAN><BR>在一般情况下，SQL Server 会自动完成数据类型的转换，例如，可以直接将字符数据类型或表达式与DATATIME 数据类型或表达式比较当表达式中用了INTEGER、 SMALLINT或TINYINT 时，SQL Server 也可将INTEGER 数据类型或表达式转换为SMALLINT数据类型或表达式，这称为隐式转换。如果不能确定SQL Server 是否能完成隐式转换或者使用了不能隐式转换的其它数据类型，就需要使用数据类型转换函数做显式转换了。此类函数有两个： <BR>·CAST（）<BR>CAST（） 函数语法如下：<BR>CAST （&lt;expression&gt; AS &lt;data_ type&gt;[ length ]）<BR><BR>·CONVERT（）<BR>CONVERT（） 函数语法如下：<BR>CONVERT （&lt;data_ type&gt;[ length ]， &lt;expression&gt; [， style]） <BR><BR><STRONG>提醒： </STRONG>1、data_type为SQL Server系统定义的数据类型，用户自定义的数据类型不能在此使用。<BR>2、length用于指定数据的长度，缺省值为30。<BR>3、把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号（+）或负号（-）的数值。<BR>4、TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符，即CHAR或VARCHAR数据类型是最大长度。<BR>5、IMAGE类型存储的数据转换到BINARY或VARBINARY类型，最多为8000个字符。<BR>6、把整数值转换为MONEY或SMALLMONEY类型，按定义的国家的货币单位来处理，如人民币、美元、英镑等。<BR>7、BIT类型的转换把非零值转换为1，并仍以BIT类型存储。<BR>8、试图转换到不同长度的数据类型，会截短转换值并在转换值后显示“+”，以标识发生了这种截断。<BR><BR>&nbsp;&nbsp;<STRONG>例4-63：</STRONG><BR><IMG height=130 src="http://www.ddvip.net/database/mssql/index1/img/62.GIF" width=524><BR><BR>&nbsp;&nbsp;<STRONG>例4-64：</STRONG><BR><IMG height=105 src="http://www.ddvip.net/database/mssql/index1/img/63.GIF" width=560><BR><BR>&nbsp;&nbsp;<STRONG>例4-65：</STRONG><BR><IMG height=257 src="http://www.ddvip.net/database/mssql/index1/img/64.GIF" width=560><BR><IMG height=30 src="http://www.ddvip.net/database/mssql/index1/img/65.GIF" width=229><BR><BR>用CONVERT（） 函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号，不同的样式编号有不同的输出格式。如表4-8 所示。<BR><IMG height=420 src="http://www.ddvip.net/database/mssql/index1/img/66.GIF" width=560><BR><BR>&nbsp;&nbsp;<STRONG>例4-66：</STRONG><BR><IMG height=126 src="http://www.ddvip.net/database/mssql/index1/img/67.GIF" width=560><BR><BR><SPAN class=style2>7、日期函数</SPAN><BR>日期函数用来操作DATETIME 和SMALLDATETIME 类型的数据，执行算术运算。与其它函数一样，可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用日期函数。其使用方法如下：<BR>&nbsp;日期函数参数，其中参数个数应不同的函数而不同。<BR><BR>·DAY（）<BR>DAY（） 函数语法如下：<BR>DAY （&lt;date_expression&gt;）<BR>DAY（） 函数返回date_expression 中的日期值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-67：</STRONG><BR><IMG height=127 src="http://www.ddvip.net/database/mssql/index1/img/68.GIF" width=342><BR><BR>在上例中，DAY（） 函数使用整数值作参数，系统从1900 年1 月1 日起往后数指定整数值+1， 天再返回其日期。<BR><BR>·MONTH（）<BR>MONTH（） 函数语法如下：<BR>MONTH (&lt;date_expression&gt;)<BR>MONTH（） 函数返回date_expression 中的月份值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-68：</STRONG><BR><IMG height=128 src="http://www.ddvip.net/database/mssql/index1/img/69.GIF" width=363><BR><BR>与DAY（） 函数不同的是，MONTH（） 函数的参数为整数时，一律返回整数值1，即SQL Server 认为其是1900 年1 月。<BR><BR>&nbsp;&nbsp;<STRONG>例4-69：</STRONG><BR><IMG height=102 src="http://www.ddvip.net/database/mssql/index1/img/70.GIF" width=265><BR><BR>·YEAR（）<BR>YEAR（） 函数语法如下：<BR>YEAR （&lt;date_expression&gt;）<BR>YEAR（） 函数返回date_expression 中的年份值。<BR><BR>&nbsp;&nbsp;<STRONG>例4-70：</STRONG><BR><IMG height=132 src="http://www.ddvip.net/database/mssql/index1/img/72.GIF" width=347><BR><BR><STRONG>提醒：</STRONG>在使用日期函数时，其日期值应在1753年到9999年之间，这是SQL Server系统所能识别的日期范围，否则会出现错误。<BR><BR>&nbsp;&nbsp;<STRONG>例4-71：</STRONG><BR><IMG height=137 src="http://www.ddvip.net/database/mssql/index1/img/73.GIF" width=560><BR><BR>·DATEADD（）<BR>DATEADD（） 函数语法如下：<BR>DATEADD （&lt;datepart&gt;， &lt;number&gt;， &lt;date&gt;）<BR>DATEADD（） 函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期。参数“datepart” 在日期函数中经常被使用，它用来指定构成日期类型数据的各组件，如年、季、月、日、星期等。其取值如表4-9 所示：<BR><IMG height=318 src="http://www.ddvip.net/database/mssql/index1/img/74.GIF" width=501><BR><BR>&nbsp;&nbsp;<STRONG>例4-72：</STRONG><BR><IMG height=55 src="http://www.ddvip.net/database/mssql/index1/img/75.GIF" width=560><BR><IMG height=107 src="http://www.ddvip.net/database/mssql/index1/img/76.GIF" width=455><BR><BR>·DATEDIFF（）<BR>DATEDIFF（） 函数语法如下：<BR>DATEDIFF（） （&lt;datepart&gt;， &lt;date1&gt;， &lt;date2&gt;）<BR>DATEDIFF（） 函数返回两个指定日期在datepart 方面的不同之处，即date2 超过date1的差距值，其结果值是一个带有正负号的整数值。针对不同的datepart， DATEDIFF（）函数所允许的最大差距值不一样，如：datepart 为second 时，DATEDIFF（） 函数所允许的最大差距值为68： 年datepart 为millisecond 时，DATEDIFF（） 函数所允许的最大差距值为24 天20 小时30 分23 秒647 毫秒。<BR><BR>&nbsp;&nbsp;<STRONG>例4-73：</STRONG> 查询在本单位工作了8 年以上的员工的姓名和所在的部门，结果按在本单位工作的时间长短排序。<BR><IMG height=315 src="http://www.ddvip.net/database/mssql/index1/img/77.GIF" width=403><BR><BR>·DATENAME（）<BR>DATENAME（） 函数语法如下：<BR>DATENAME （&lt;datepart&gt;， &lt;date）&gt;<BR>DATENAME（） 函数以字符串的形式返回日期的指定部分此部分。由datepart 来指定。<BR><BR>&nbsp;&nbsp;<STRONG>例4-74：</STRONG> 查询工资大于等于7000 的员工的姓名、部门编号、工资和进入单位的年份，结果按工资高低降序排列。<BR><IMG height=84 src="http://www.ddvip.net/database/mssql/index1/img/78.GIF" width=560><IMG height=315 src="http://www.ddvip.net/database/mssql/index1/img/79.GIF" width=469><BR><BR>·DATEPART（）<BR>DATEPART（） 函数语法如下：<BR>DATEPART （&lt;datepart&gt;， &lt;date&gt;）<BR>DATEPART（） 函数以整数值的形式返回日期的指定部分。此部分由datepart 来指定。<BR>DATEPART （dd， date） 等同于DAY （date）<BR>DATEPART （mm， date） 等同于MONTH （date）<BR>DATEPART （yy， date） 等同于YEAR （date）<BR><BR>&nbsp;&nbsp;<STRONG>例4-75：</STRONG><BR><IMG height=317 src="http://www.ddvip.net/database/mssql/index1/img/80.GIF" width=486><BR><BR>·GETDATE（）<BR>GETDATE（） 函数语法如下：<BR>GETDATE（）<BR>GETDATE（） 函数以DATETIME 的缺省格式返回系统当前的日期和时间，它常作为其它函数或命令的参数使用。<BR><BR>&nbsp;&nbsp;<STRONG>例4-71：</STRONG><BR><IMG height=131 src="http://www.ddvip.net/database/mssql/index1/img/81.GIF" width=409><BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:04 <a href="http://www.blogjava.net/plpa/articles/2917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算术函</title><link>http://www.blogjava.net/plpa/articles/2915.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2915.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2915.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2915.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>算术函数</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>算术函数可对数据类型为整型INTEGER、 浮点型FLOAT、 实型REAL、 货币型MONEY和SMALLMONEY 的列进行操作。它的返回值是6 位小数，如果使用出错，则返回NULL值并显示警告信息。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用算术函数。Transact-SQL 中的算术函数见表4-7。<BR><IMG height=252 src="http://www.ddvip.net/database/mssql/index1/img/27.GIF" width=560><BR><IMG height=497 src="http://www.ddvip.net/database/mssql/index1/img/28.GIF" width=560><BR><IMG height=241 src="http://www.ddvip.net/database/mssql/index1/img/29.GIF" width=560> <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>例4-37：</STRONG> 在同一表达式中使用SIN（）、 ATAN（）、 RAND（）、 PI（）、 SIGN（）函数 <BR><BR><IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/30.GIF" width=518><BR><IMG height=92 src="http://www.ddvip.net/database/mssql/index1/img/31.GIF" width=560><BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>例4-38：</STRONG> 用CEILING（） 和FLOOR（） 函数返回大于或等于指定值的最小整数值和小于或等于指定值的最大整数值。<BR><BR><IMG height=128 src="http://www.ddvip.net/database/mssql/index1/img/32.GIF" width=560><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>例4-39：&nbsp;</STRONG>ROUND（） 函数的使用<BR><BR><IMG height=129 src="http://www.ddvip.net/database/mssql/index1/img/33.GIF" width=560><BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:03 <a href="http://www.blogjava.net/plpa/articles/2915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库 统计函数</title><link>http://www.blogjava.net/plpa/articles/2914.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2914.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2914.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2914.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>数据库 统计函数</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>统计函数是在数据库操作中时常使用的函数,又称为基本函数或集函数,常用的统计函数如表4-6 所示.<BR><BR><IMG height=159 src="http://www.ddvip.net/database/mssql/index1/img/1.GIF" width=550><BR><BR>这些函数通常用在SELECT 子句中，作为结果数据集的字段返回的结果。在SELECT语句的SELECT 子句中使用函数的语法如下： <BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT 函数名（列名1 或*），...函数名（列名n）</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM 表名<BR></STRONG><BR><STRONG>提醒：</STRONG>函数的对象或自变量必须包括在圆括号内。如果函数需要一个以上的自变量，可用逗号隔开各个自变量。<BR><SPAN class=style1><BR><SPAN class=style2>1、AVG（）</SPAN></SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;AVG（） 函数返回有关列值的算术平均值。此函数只适用数值型的列。其语法如下：<BR><IMG height=22 src="http://www.ddvip.net/database/mssql/index1/img/2.GIF" width=354><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-26： 求各部门的平均工资<BR><BR><IMG height=92 src="http://www.ddvip.net/database/mssql/index1/img/3.GIF" width=286><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;运行结果如下：<BR><IMG height=19 src="http://www.ddvip.net/database/mssql/index1/img/4.GIF" width=116> <BR><IMG height=220 src="http://www.ddvip.net/database/mssql/index1/img/5.GIF" width=179> <BR><BR><SPAN class=style2>2、COUNT（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;COUNT（） 函数返回与选择表达式匹配的列中不为NULL 值的数据个数。COUNT（）函数的语法如下：<BR><IMG height=47 src="http://www.ddvip.net/database/mssql/index1/img/6.GIF" width=259><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-27： 计算企业的部门数目<BR><IMG height=208 src="http://www.ddvip.net/database/mssql/index1/img/7.GIF" width=329><BR><BR><STRONG>提醒：</STRONG>如果用COUNT（）函数引用一个列名，则返回列值的个数。 <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;COUNT（） 函数在计算中重复计算了相同的值。如果使用了关键字DISTINCT， 则COUNT（） 函数就返回行惟一值的个数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;如果在SELECT 子句的列名位置上使用符号（*）， 即使用COUNT （*）， 则指定了与SELECT 语句的判别式匹配的所有行，COUNT（）函数将计算字段的行数，包括为NULL值的行。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-28： 列出员工少于3 人的部门编号<BR><IMG height=128 src="http://www.ddvip.net/database/mssql/index1/img/8.GIF" width=349><BR><IMG height=130 src="http://www.ddvip.net/database/mssql/index1/img/9.GIF" width=190><BR><BR><SPAN class=style2>3、MAX（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;MAX（） 函数返回某一列的最大值。此函数适用于数值型、字符型、和日期型的列。对于列值为NULL 的列，MAX（） 函数不将其列为对比的对象。其语法如下：<BR><IMG height=60 src="http://www.ddvip.net/database/mssql/index1/img/10.GIF" width=240><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-29： 求工资最高的员工姓名<BR><IMG height=341 src="http://www.ddvip.net/database/mssql/index1/img/11.GIF" width=247><BR><BR><SPAN class=style2>4、MIN（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;MIN（） 函数返回某一列的最小值。此函数适用于数值型、字符型、和日期型的列。对于列值为NULL 的列，MIN（） 函数不将其列为对比的对象。其语法如下：<BR><IMG height=57 src="http://www.ddvip.net/database/mssql/index1/img/12.GIF" width=234><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-30： 求最资深的员工姓名<BR><IMG height=133 src="http://www.ddvip.net/database/mssql/index1/img/13.GIF" width=255><BR><IMG height=187 src="http://www.ddvip.net/database/mssql/index1/img/14.GIF" width=206><BR><BR><SPAN class=style2>5、SUM（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;SUM（） 函数用来返回诸如列值这样的实体的总和。此函数只适用于数值型的列，不包括NULL 值。其语法如下：<BR><IMG height=30 src="http://www.ddvip.net/database/mssql/index1/img/15.GIF" width=308><BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-31： 求各部门的员工工资总额<BR><IMG height=426 src="http://www.ddvip.net/database/mssql/index1/img/16.GIF" width=244><BR>&nbsp;&nbsp;&nbsp;&nbsp;可以在一个语句中使用多个函数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;例4-32： 求员工工资的最大值、最小值、平均值<BR><IMG height=159 src="http://www.ddvip.net/database/mssql/index1/img/17.GIF" width=672><BR><IMG height=44 src="http://www.ddvip.net/database/mssql/index1/img/18.GIF" width=359><BR><BR>除了上述常用的函数外，统计函数还有以下几种：<BR><BR><SPAN class=style2>6、STDEV（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;STDEV（） 函数语法如下：<BR><IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/19.GIF" width=210><BR>&nbsp;&nbsp;&nbsp;&nbsp;STDEV（） 函数返回表达式中所有数据的标准差（Statistical Standard Deviation）。表达式通常为表的某一数据类型为NUMERIC 的列（或近似NUMERIC 类型的列，如MONEY 类型，但BIT 类型除外）。表达式中的NULL 值将被忽略。其返回值为FLOAT类型。<BR><IMG height=215 src="http://www.ddvip.net/database/mssql/index1/img/20.GIF" width=211><BR><BR><SPAN class=style2>7、STDEVP（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;STDEVP（） 函数语法如下：<BR><IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/21.GIF" width=240><BR>&nbsp;&nbsp;&nbsp;STDEVP（） 函数返回总体标准差（Statistical Standard Deviation for The Population）。表达式及返回值类型同STDEV（） 函数。<BR><IMG height=215 src="http://www.ddvip.net/database/mssql/index1/img/22.GIF" width=196><BR><BR><SPAN class=style2>8、VAR（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;VAR（） 函数语法如下：<BR><IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/23.GIF" width=211><BR>&nbsp;&nbsp;&nbsp;&nbsp;VAR（） 函数返回表达式中所有值的统计变异数（Statistical Variance）。 表达式及返回值类型同STDEV（） 函数。<BR><IMG height=159 src="http://www.ddvip.net/database/mssql/index1/img/24.GIF" width=192><BR><BR><SPAN class=style2>9、VARP（）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;VARP（） 函数语法如下：<BR><IMG height=27 src="http://www.ddvip.net/database/mssql/index1/img/25.GIF" width=103><BR>&nbsp;&nbsp;&nbsp;&nbsp;VARP（） 函数返回总体变异数（Statistical Variance for The Population）。 表达式及返回值类型同STDEV（） 函数。<BR><IMG height=186 src="http://www.ddvip.net/database/mssql/index1/img/26.GIF" width=198><BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:02 <a href="http://www.blogjava.net/plpa/articles/2914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql 其它命令</title><link>http://www.blogjava.net/plpa/articles/2913.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2913.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2913.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2913.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>sql 其它命令</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.1 BACKUP</SPAN><BR>BACKUP 命令用于将数据库内容或其事务处理日志备份到存储介质上（软盘、硬盘、磁带）。等SQL Server 7.0 以前的版本用的是DUMP 命令来执行此功能，从SQL Server 2000起，不再使用DUMP 命令。关于BACKUP 命令的详情请参见“数据备份与恢复”章节。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.2 CHECKPOINT</SPAN><BR>语法如下：<BR>CHECKPOINT<BR>CHECKPOINT 命令用于将当前工作的数据库中被更改过的数据页data page 或日志页（log page）从数据缓冲器（data buffer cache）中强制写入硬盘。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.3 DBCC</SPAN><BR>DBCC Database Base Consistency Checker，数据库一致性检查程序）命令用于验证数据库完整性、查找错误、分析系统使用情况等。<BR>DBCC 命令后必须加上子命令，系统才知道要做什么。如DBCC CHECKALLOC 命令检查目前数据库内所有数据页的分配和使用情况。<BR>关于DBCC 命令的详情，请参见附录。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.4 DECLARE</SPAN><BR>语法如下:<BR>DECLARE {{ @local_variable data_type }<BR>| { @cursor_variable_name CURSOR }<BR>| { table_type_definition }<BR>} [，...n]]<BR>DECLARE 命令用于声明一个或多个局部变量、游标变量或表变量。在用DECLARE命令声明之后，所有的变量都被赋予初值NULL。需要用SELECT 或SET命令来给变量赋值。变量类型可为系统定义的或用户定义的类型，但不能为TEXT、NTEXT、IMAGE类型。CURSOR 指名变量是局部的游标变量。<BR>例4-16<BR>declare @x float @y datetime<BR>select @x = pi @y = getdate<BR>print @x<BR>print @y<BR>运行结果如下:<BR>3.14159<BR>Jun 17 2000 4:32PM<BR><STRONG>注意：</STRONG>如果变量为字符型，那么在data_type表达中应指明<BR>其最大长度，否则系统认为其长度为1。<BR>例4-17<BR>declare @x char @y char 10<BR>select @x = '123' @y = 'data_type'<BR>print @x<BR>print @y<BR>运行结果如下<BR>1<BR>data_type <BR><BR><SPAN class=style2>&nbsp;&nbsp;&nbsp;&nbsp;4.7.5 EXECUTE</SPAN><BR>EXECUTE 命令用来执行存储过程，其具体用法请参见“存储过程”章节。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.6 KILL</SPAN><BR>KILL 命令用于终止某一过程的执行，其具体用法请参见“存储过程”章节。<BR><SPAN class=style2>&nbsp;&nbsp;&nbsp;&nbsp;4.7.7 PRINT</SPAN><BR>语法如下：<BR>PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expression<BR>PRINT 命令向客户端返回一个用户自定义的信息，即显示一个字符串（最长为255个字符）、局部变量或全局变量。如果变量值不是字符串的话，必须先用数据类型转换函数CONVERT（），将其转换为字符串。其中，string_expression 是可返回一个字符串的表达式。表达式的长度可以超过8000 个字符，但超过8000 的字符将不会显示。<BR>例4-18：<BR>declare @x char 10 @y char 10<BR>select @x = 'SQL' @y = 'Server'<BR>print '科技'<BR>print @x + @y</P>
<P>运行结果如下：<BR>科技<BR>SQL Server<BR><BR><SPAN class=style2>&nbsp;&nbsp;&nbsp;4.7.8 RAISERROR</SPAN><BR>RAISERROR 命令用于在SQL Server 系统返回错误信息时，同时返回用户指定的信息。其具体用法请参见“存储过程”章节。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.9 READTEXT</SPAN><BR>READTEXT 命令语法如下<BR>READTEXT {table.column text_pointer offset size} [HOLDLOCK]<BR>READTEXT 命令用于从数据类型为TEXT、NTEXT 或IMAGE 的列中读取数据。命令从偏移位置offset+1 个字符起读取size 个字符，如果size 为0， 则会读取4KB 的数据。其中text_pointer 是指向存储文本的第一个数据库页的指针，它可以用TEXTPTR（）函数来获取。关于TEXTPTR （）函数的使用请参见“4.8.7 TEXT 和IMAGE 函数”。HOLDLOCK 选项用于锁定所读取的数据直到传输结束，这段时间内，其它用户只能读取数据，不能更改数据。<BR>例4-19：<BR>use pangu<BR>declare @t_pointer varbinary （16）<BR>select @t_pointer = textptr （d_intro）<BR>from department<BR>where d_name = '技术部'<BR>readtext department.d_intro @t_pointer 0 42<BR>运行结果如下：<BR>d_intro<BR>--------------------------------------------------------------------<BR>进行技术研究与开发，提供最新的技术动态信息<BR>（1 row （s） affected）<BR><BR><STRONG>注意：</STRONG>如果数据列为汉字，则offset值应取o或其它偶数，如果用奇数，则会出现乱码<BR><BR><SPAN class=style2>&nbsp;&nbsp;&nbsp;4.7.10 RESTORE</SPAN><BR>RESTORE 命令用来将数据库或其事务处理日志备份文件由存储介质回存到SQL Server系统中。SQL Server 7.0 以前的版本用的是LOAD命令来执行此功能，从SQL Server 2000起，不再使用LOAD 命令。关于RESTORE 命令的详情，请参见“数据备份与恢复”章节<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.11 SELECT</SPAN><BR>SELECT 命令可用于给变量赋值其语法如下：<BR>SELECT {@local_variable = expression } [ ...n]<BR>SELECT 命令可以一次给多个变量赋值。当表达式expression 为列名时，SELECT 命令可利用其查询功能一次返回多个值，变量中保存的是其返回的最后一个值。如果SELECT命令没有返回值，则变量值仍为其原来的值。当表达式expression 是一个子查询时，如果子查询没有返回值则变量被设为NULL。<BR>例4-20：<BR>use pangu<BR>declare @x char （30）<BR>select @x = 'CPU'<BR>select @x = d_name<BR>from department<BR>where dept_id = 9999 <BR>select @x<BR>运行结果如下:<BR>-----------------------<BR>CPU<BR>例4-21:<BR>use pangu<BR>declare @x char 30<BR>select @x = 'Main Board'<BR>select @x = （select d_name<BR>from department<BR>where dept_id=9999）<BR>select @x<BR>运行结果如下<BR>-----------------------<BR>NULL</P>
<P>4.7.12 SET<BR>SET 命令有两种用法：<BR>1 用于给局部变量赋值<BR>其语法如下：<BR>SET { {@local_variable = expression} | { @cursor_variable =<BR>{ @cursor_variable cursor_name<BR>| { CURSOR<BR>[FORWARD_ONLY | SCROLL]<BR>[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]<BR>[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]<BR>[TYPE_WARNING]<BR>FOR select_statement<BR>[FOR {READ ONLY<BR>| UPDATE [OF column_name [ ...n]] } ] } } } }<BR>其中的CURSOR 等参数将在“游标”一章中讲述。<BR>在用DECLARE 命令声明之后，所有的变量都被赋予初值NULL。 需要用SET 命令来给变量赋值。但与SELECT 命令不同的是，SET 命令一次只能给一个变量赋值。不过由于SET 命令功能更强，且更严密，因此，SQL Server 推荐使用SET 命令来给变量赋值。</P>
<P>例4-22<BR>declare @x char （30）<BR>set @x = 'This is a SET command.'<BR>select @x<BR>运行结果如下<BR>------------------------------<BR>This is a SET command.<BR>例4-23<BR>use pangu<BR>declare @department_num int @x char （10）<BR>set @department_num = select count （*）<BR>from department）<BR>set @x = '部门数目'<BR>print @x<BR>select @department_num<BR>运行结果如下<BR>部门数目<BR>-----------<BR>7</P>
<P>2 用于设定用户执行SQL 命令，时SQL Server 的处理选项设定<BR>有以下几种设定方式：</P>
<UL>
<LI>SET 选项ON 
<LI>SET 选项OFF 
<LI>SET 选项值 </LI></UL>
<P>关于此类SET 命令的详情，请参见附录。<BR>语法如下<BR>SHUTDOWN [WITH NOWAIT]<BR>SHUTDOWN 命令用于停止SQL Server 的执行,当使用NOWAIT 参数时，SHUTDOWN命令立即停止SQL Server，在终止所有的用户过程并对每一现行的事务发生一个回滚后，退出SQL Server。当没有用NOWAIT 参数时，SHUTDOWN 命令将按以下步骤执行：<BR>（1） 终止任何用户登录SQL Server。<BR>（2） 等待尚未完成的Transact-SQL 命令或存储过程执行完毕。<BR>（3） 在每个数据库中执行CHECKPOINT 命令<BR>（4） 停止SQL Server 的执行<BR>例4-24<BR>shutdown with nowait<BR>运行结果如下：<BR>------------------------------<BR>Changed language setting to us_english.<BR>Server shut down by request.<BR>SQL Server is terminating this process.<BR>停止SQL Server 的执行的方法还有好几种，我们将在“企业管理器EnterpriseManager” 章节中介绍。</P>
<P><SPAN class=style2>&nbsp;&nbsp;&nbsp;&nbsp;4.7.14 WRITETEXT</SPAN><BR>语法如下：<BR>WRITETEXT {table.column text_pointer} [WITH LOG] {data}<BR>WRITETEXT 命令用于向数据类型为TEXT、 NTEXT 或IMAGE 的列中读取数据。其中text_pointer 是指向存储文本的第一个数据库页的指针,它可以用TEXTPTR（）来获取。关于TEXTPTR 函数的使用请参见“4.8.7 TEXT 和IMAGE 函数”。WOTH LOG选项用于记录所写入的数据。data 可为文字或变量，其最大长度为120KB。注意：WRITETEXT命令不能作用于视图。</P>
<P>推荐使用UPDATETEXT 命令来修改TEXT、NTEXT 和IMAGE 类型的数据。因为WRITETEXT 命令将数据列的数据完全替换，而UPDATETEXT 命令可以只更改数据列的一部分。关于UPDATETEXT 命令的使用将在“数据库更新”章节中讲述。<BR>例4-25<BR>declare @t_pointer binary （16）<BR>use pangu<BR>select @t_pointer = textptr d_intro<BR>from department<BR>where d_name = '技术部'<BR>writetext department.d_intro @t_pointer '进行技术研究与开发提供最新的技术动态信息'<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN class=style2>4.7.15 USE</SPAN><BR>语法如下<BR>USE {databasename}<BR>USE 命令用于改变当前使用的数据库为指定的数据库。用户必须是目标数据库的用户成员或目标数据库建有GUEST 用户账号时，使用USE 命令才能成功切换到目标数据库。<BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:01 <a href="http://www.blogjava.net/plpa/articles/2913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL 流程控制命令</title><link>http://www.blogjava.net/plpa/articles/2912.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2912.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2912.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2912.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>SQL 流程控制命令</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令。<BR><BR><SPAN class=style2>4.6.1 IF…ELSE</SPAN><BR>其语法如下：<BR>IF &lt;条件表达式&gt;<BR>&lt;命令行或程序块&gt;<BR>[ELSE [条件表达式]<BR>&lt;命令行或程序块&gt;]<BR>其中&lt;条件表达式&gt;可以是各种表达式的组合，但表达式的值必须是逻辑值“真”或“假”。ELSE子句是可选的，最简单的IF语句没有ELSE子句部分。IF…ELSE用来判断当某一条件成立时执行某段程序，条件不成立时执行另一段程序。如果不使用程序块，IF或ELSE只能执行一条命令。IF…ELSE可以进行嵌套。<BR><BR>例4-9<BR>declare@x int,@y int,@z int<BR>select @x=1,@y=2, @z=3<BR>if@x&gt;@y<BR>&nbsp;&nbsp;print'x&gt;y' --打印字符串'x&gt;y'<BR>else if@y&gt;@z<BR>print'y&gt;z'<BR>&nbsp;&nbsp;&nbsp;&nbsp;else print'z&gt;y'<BR>运行结果如下<BR>z&gt;y <BR><STRONG>注意：</STRONG>在Transact-SQL中最多可嵌套32级。</P>
<P><SPAN class=style2>4.6.2 BEGIN…END</SPAN><BR>其语法如下：<BR>BEGIN<BR>&lt;命令行或程序块&gt;<BR>END<BR>BEGIN…END用来设定一个程序块，将在BEGIN…END内的所有程序视为一个单元执行BEGIN…END经常在条件语句，如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一程序块。</P>
<P><SPAN class=style2>4.6.3 CASE</SPAN><BR>CASE 命令有两种语句格式:<BR>CASE &lt;运算式&gt;<BR>WHEN &lt;运算式&gt;THEN&lt;运算式&gt;<BR>… <BR>WHEN&lt;运算式&gt;THEN&lt;运算式&gt;<BR>[ELSE&lt;运算式&gt;]<BR>END</P>
<P>CASE<BR>WHEN &lt;条件表达式&gt; THEN &lt;运算式&gt;<BR>WHEN &lt;条件表达式&gt; THEN &lt;运算式&gt;<BR>[ELSE &lt;运算式&gt;]<BR>END<BR>CASE命令可以嵌套到SQL命令中。<BR>例4-10：调整员工工资，工作级别为“1”的上调8%，工作级别为“2”的上调7%，工作级别为“3”的上调6%，其它上调5%。<BR>use pangu<BR>update employee<BR>set e_wage =<BR>case<BR>when job_level = ’1’ then e_wage*1.08<BR>when job_level = ’2’ then e_wage*1.07<BR>when job_level = ’3’ then e_wage*1.06<BR>else e_wage*1.05<BR>end<BR><STRONG>注意:</STRONG>执行CASE子句时，只运行第一个匹配的子名。</P>
<P><SPAN class=style2>4.6.4 WHILE…CONTINUE…BREAK</SPAN><BR>其语法如下:<BR>WHILE &lt;条件表达式&gt;<BR>BEGIN<BR>&lt;命令行或程序块&gt;<BR>[BREAK]<BR>[CONTINUE]<BR>[命令行或程序块]<BR>END<BR>WHILE 命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过CONTINUE 命令之后的语句，回到WHILE 循环的第一行命令。BREAK 命令则让程序完全跳出循环，结束WHILE 命令的执行。WHILE 语句也可以嵌套。</P>
<P>例4-11:<BR>declare @x int @y int @c int<BR>例4-11:<BR>declare @x int, @y int, @c int<BR>select @x = 1, @y=1<BR>while @x &lt; 3<BR>begin<BR>print @x --打印变量x 的值<BR>while @y &lt; 3<BR>begin<BR>select @c = 100*@ x+ @y<BR>print @c --打印变量c 的值<BR>select @y = @y + 1<BR>end<BR>select @x = @x + 1<BR>select @y = 1<BR>end<BR>运行结果如下<BR>1<BR>101<BR>102<BR>2<BR>201<BR>202<BR><BR><SPAN class=style2>4.6.5 WAITFOR</SPAN><BR>其语法如下:<BR>WAITFOR {DELAY &lt;‘时间’&gt; | TIME &lt;‘时间’&gt;<BR>| ERROREXIT | PROCESSEXIT | MIRROREXIT}<BR>WAITFOR 命令用来暂时停止程序执行，直到所设定的等待时间已过或所设定的时间已到才继续往下执行。其中‘时间’必须为DATETIME 类型的数据，如：‘11:15:27’，<BR>但不能包括日期各关键字含义如下：</P>
<P>
<UL>
<LI>DELAY 用来设定等待的时间最多可达24 小时； 
<LI>TIME 用来设定等待结束的时间点； 
<LI>ERROREXIT 直到处理非正常中断； 
<LI>PROCESSEXIT 直到处理正常或非正常中断； 
<LI>MIRROREXIT 直到镜像设备失败。 </LI></UL>
<P>例4-12 等待1 小时2 分零3 秒后才执行SELECT 语句<BR>waitfor delay ’01:02:03’<BR>select * from employee</P>例4-13：等到晚上11 点零8 分后才执行SELECT 语句<BR>waitfor time ’23:08:00’<BR>select * from employee 
<P></P>
<P><SPAN class=style2>4.6.6 GOTO</SPAN><BR>语法如下：<BR>GOTO 标识符<BR>GOTO 命令用来改变程序执行的流程，使程序跳到标有标识符的指定的程序行再继续往下执行。作为跳转目标的标识符可为数字与字符的组合，但必须以“：”结尾，如‘12：’或‘a_1：’。在GOTO 命令行，标识符后不必跟“：”。<BR>例4-14 分行打印字符‘1’、‘2’、‘3’、‘4’、‘5’<BR>declare @x int<BR>select @x = 1<BR>label_1<BR>print @x<BR>select @x = @x + 1<BR>while @x &lt; 6<BR>goto label_1</P>
<P><SPAN class=style2>4.6.7 RETURN</SPAN><BR>语法如下<BR>RETURN [整数值]<BR>RETURN 命令用于结束当前程序的执行，返回到上一个调用它的程序或其它程序。在括号内可指定一个返回值。<BR>例4-15<BR>declare @x int @y int<BR>select @x = 1 @y = 2<BR>if x&gt;y<BR>return 1<BR>else<BR>return 2<BR>如果没有指定返回值，SQL Server 系统会根据程序执行的结果返回一个内定值，如<BR>表4-5 所示。<BR><IMG height=305 src="http://www.ddvip.net/database/mssql/index1/img/39.jpg" width=444> <BR><BR>如果运行过程产生了多个错误，SQL Server系统将返回绝对值最大的数值；如果此时用户此时定义了返回值，则以返回用户定义的值。RETURN语句不能返回NULL值。<BR></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 14:00 <a href="http://www.blogjava.net/plpa/articles/2912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL 变量</title><link>http://www.blogjava.net/plpa/articles/2910.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2910.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2910.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2910.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>SQL 变量</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;Transact-SQL中可以使用两种变量，一种是局部变量（Local Variable）另外一种是全局变量（Global Variable）。<BR><BR><SPAN class=style2>4.4.1 局部变量<BR></SPAN>局部变量是用户可自定义的变量，它的作用范围仅在程序内部。在程序中通常用来储存从表中查询到的数据，或当作程序执行过程中暂存变量使用。局部变量必须以“@”开头，而且必须先用DECLARE命令说明后才可使用。其说明形式如下：<BR>DECLARE @变量名 变量类型 [@变量名 变量类型…]<BR>其中变量类型可以是SQL Server 2000支持的所有数据类型，也可以是用户自定义的数据类型。DECLARE命令的详细用法请参见“4.6其它命令”。<BR>在Transact-SQL中不能像在一般的程序语言中一样使用“变量=变量值”来给变量赋值。必须使用SELECT或SET命令来设定变量的值，其语法如下：<BR>SELECT@局部变量=变量值<BR>SET @局部变量=变量值<BR>例4-5：声明一个长度为10 个字符的变量“id”并赋值<BR>declare@id char（10）<BR>select@id=‘10010001’</P>
<P><STRONG>注意：</STRONG>可以在Select命令查询数据时，在Select命令中直接将列值赋给变量。例4-6:查询编号为“10010001”的员工和工资，将其分别赋予变量name和wage。</P>
<P>例4-6<BR>use pangu<BR>declare@name char（30）@wage money<BR>select@name=e_name，@wage=e_wage<BR>from employee<BR>where emp_id='10010001'<BR>select@name as e_name，@wage as e_wage<BR>运行结果如下：<BR>e_name e_wage<BR>------------------------------ -----------<BR>张三 8000.0000</P>
<P><STRONG>注意：</STRONG>数据库语言和编程语言有一些关键字，关键字是在某一一样下能够促使某一操作发生的字符组合，为避免冲突和产生错误，在命令表、列、变量以及其它对象时应避免使用关键字。有关SQL Server的关键字请参见附录。<BR><BR><SPAN class=style2>4.4.2 全局变量</SPAN><BR>全局变量是SQL Server系统内部使用的变量，其作用范围并不局限于某一程序，而是任何程序均可随时调用全局变量通常存储一些SQL Server的配置设定值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。有关SQL Server 全局变量的详细情况请参见附录。</P>
<P><STRONG>注意：</STRONG>全局变量不是由用户的程序定义的，它们是在服务器级定应义的。只能使用预先说明及定义的变局变量。引用全局变量时，必须以“@@”开头。局部变量的名称不能与全局变量的名称相同、否则会在应用中出错。</P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 13:59 <a href="http://www.blogjava.net/plpa/articles/2910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>注释符、运算符与通配符</title><link>http://www.blogjava.net/plpa/articles/2911.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2911.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2911.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2911.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>注释符、运算符与通配符</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR><SPAN class=style2>4.5.1 注释符（Annotation）</SPAN><BR>在Transact-SQL 中可使用两类注释符。<BR>ANSI 标准的注释符“--” 用于单行注释；<BR>与C语言相同的程序注释符号，即“/**/”。“/*”用于注释文字的开头，“*/”用于注释文字的结尾，可在程序中标识多行文字为注释。</P>
<P><SPAN class=style2>4.5.2 运算符（Operator）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;1 算术运算符<BR>包括：+（加）、―（减）、（乘）、（除）、%（取余）<BR>&nbsp;&nbsp;&nbsp;&nbsp;2 比较运算符<BR>包括：&gt;（大于）&lt;（小于）、= （等于）、&gt;=（大于等于）、&lt;=（小于等于）、&lt;&gt;<BR>（不等于）、!=（不等于）、!&gt;（不大于）!&lt;（ 不小于）<BR>其中!=、!&gt;、!&lt;不是ANSI标准的运算符。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3 逻辑运算符<BR>包括：AND（与）、OR（或）、NOT（非）<BR>&nbsp;&nbsp;&nbsp;&nbsp;4 位运算符<BR>包括：按位与、|（按位或）、~（按位非）^（按位异或）<BR>&nbsp;&nbsp;&nbsp;&nbsp;5 连接运算符<BR>连接运算符“+”用于连接两个或两个以上的字符或二进制串、列名或者串和列的混合体，将一个串加入到另一个串的末尾。其语法如下：<BR>&lt;expression1&gt;+&lt;expression2&gt;<BR>例4-7<BR>use pangu<BR>declare@startdate datetime<BR>set@startdate=‘1/1/2000’<BR>select‘Start Date：’+convert（varchar（12）@startdate）<BR>--convert（）函数用于转换数据类型，见4.8.4<BR>运行结果如下：<BR>Start Date：Jan 1 2000<BR>例4-8：<BR>use pangu<BR>select‘月薪最高的员工是：‘+ e_name+’月薪为：‘+convert（varchar（10）e_wage<BR>from employee<BR>where e_wage=<BR>（select max （e_wage）<BR>from employee）<BR>运行结果如下：<BR>月薪最高的员工是：张三月薪为8000.00<BR>（1 row （s） affected）<BR>在Transact-SQL中运算符的处理顺序如下所示，如果相同层次的运算出现在一起时则处理顺序位从左到右。</P>
<UL>
<LI>括号 （） 
<LI>位运算符 ~ 
<LI>算术运算符 *、/、% 
<LI>算术运算符 +、- 
<LI>位运算符 ^ 
<LI>位运算符 &amp; 
<LI>位运算符 | 
<LI>逻辑运算符 NOT\ 
<LI>逻辑运算符 AND 
<LI>逻辑运算符 OR </LI></UL>
<P><SPAN class=style2>4.5.3 通配符Wildcard</SPAN><BR>在SQL Server中可以使用如表4-4所示的通配符。<BR><BR>表4-4 Transact-SQL的通配符<BR><IMG height=88 src="http://www.ddvip.net/database/mssql/index1/img/37.jpg" width=519></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 13:59 <a href="http://www.blogjava.net/plpa/articles/2911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库4</title><link>http://www.blogjava.net/plpa/articles/2906.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2906.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2906.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2906.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=40></TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;Transact-SQL 语言中标准的SQL 语句畅通无阻.Transact-SQL 也有类似于SQL 语言的分类,不过做了许多扩充.Transact-SQL 语言的分类如下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ·变量说明<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来说明变量的命令.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据定义语言(DDL,Data Definition Language)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来建立数据库、数据库对象和定义其列，大部分是以CREATE 开头的命令，如：CREATE TABLE 、CREATE VIEW 、DROP TABLE 等。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据操纵语言（DML，Data Manipulation Language）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来操纵数据库中的数据的命令，如：SELECT、 INSERT、 UPDATE 、DELETE 、CURSOR等。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据控制语言（DCL， Data Control Language）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来控制数据库组件的存取许可、存取权限等的命令。如GRANT、 REVOKE 等。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·流程控制语言（Flow Control Language）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于设计应用程序的语句如IF WHILE CASE 等<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·内嵌函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明变量的命令。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·其它命令<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;嵌于命令中使用的标准函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;上述分类语言中，数据定义语言DDL、 数据操纵语言DML 、数据控制语言DCL 分布在以后各章讲述，本章重点讨论变量说明、流程控制、内嵌函数和其它不好归类的命令。<BR></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:16 <a href="http://www.blogjava.net/plpa/articles/2906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库3</title><link>http://www.blogjava.net/plpa/articles/2905.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2905.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2905.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2905.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;SQL 语言是一种介于关系代数与关系演算之间的语言，其功能包括查询、操纵、定义和控制4 个方面，是一个通用的、功能极强的关系数据库语言。<BR><BR><SPAN class=style2>4.1.1 SQL 概述<BR>&nbsp;&nbsp;&nbsp;</SPAN>&nbsp;SQL 语言是1974 年由Boyce 和Chamberlin 提出的。1975 年至1979 年，IBM 公司San Jose Research Laboratory 研制的关系数据库管理系统原形系统System R 实现了这种语言。由于它功能丰富，语言简洁，使用方法灵活，倍受用户和计算机业界的青睐，被众多的计算机公司和软件公司采用。经过多年的发展，SQL 语言已成为关系数据库的标准语言。<BR><BR><SPAN class=style2>4.1.2 SQL 语言的组成</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;SQL 语言主要由以下几部分组成:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据定义语言（DDL，Data Definition Language）；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据操纵语言（DML，Data Manipulation Language）；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·数据控制语言（DCL，Data Control Language）；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·其它语言要素（Additional Language Elements）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;SQL 语句数目、种类较多、其主体大约由40 条语句组成，如表4-1 所示。<BR><BR><IMG height=367 src="http://www.ddvip.net/database/mssql/index1/img/30.JPG" width=560><IMG height=474 src="http://www.ddvip.net/database/mssql/index1/img/31.JPG" width=560><BR><BR><SPAN class=style2>4.1.3 SQL 语句的结构</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;所有的SQL 语句均有自己的格式，如图4-1 所示每条SQL 语句均由一个谓词（Verb）开始，该谓词描述这条语句要产生的动作，如图4-1 中的SELECT 关键字。谓词后紧接着一个或多个子句（Clause）子句中给出了被谓词作用的数据或提供谓词动作的详细信息。每一条子句由一个关键字开始，如图4-1 中的WHERE。<BR><IMG height=250 src="http://www.ddvip.net/database/mssql/index1/img/32.JPG" width=560><BR><SPAN class=style2><BR>4.1.4 常用的SQL 语句</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;在使用数据库时用得最多的是数据操纵语言（Data Manipulation Language）。 DML包含了最常用的核心SQL 语句，即SELECT 、INSERT 、UPDATE 、DELETE。 下面对以后章节中经常用到的SELECT 语句作简单介绍（有关这些语句的具体语法请参见“数据查询：和“数据库更新”章节）<BR>&nbsp;&nbsp;&nbsp;&nbsp;简单的SELECT 语句的语法如下：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT [ALL|DISTINCT] &lt;目标表达式&gt;[，&lt;目标表达式&gt;]...</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM &lt;表或视图名&gt;[, &lt;表或视图名&gt;]...</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>[WHERE &lt;条件表达式&gt;]</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>[GROUP BY &lt;列名1&gt; [HAVING &lt;条件表达式&gt;]]</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>[ORDER BY &lt;列名2&gt; [ASC | DESC] ]</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;整个SELECT 语句的含义是:根据WHERE 子句的条件表达式,从FROM 子句指定的基本表或视图中找出满足条件的元素组,再按SELECT 子句中的目标列表达式选出元素组中的属性值形成结果表。如果有GROUP 子句，则将结果按&lt;列名1&gt;的值进行分组，该属性列值相等的元素组为一个组，每个组产生结果表中的一条记录。如果GROUP 子句带有HAVING 短语，则只有满足指定条件的组才予以输出。如果有ORDER 子句，则结果表还要按&lt;列2&gt;的值升序或降序排序。下面对SELECT 语句的常用形式举例说明。<BR><BR>&nbsp;&nbsp;&nbsp;<SPAN class=style2>&nbsp;</SPAN><STRONG>例4-1：查询所有员工的员工号和工资</STRONG><BR>use pangu<BR>select emp_id，e_wage<BR>from employee<BR><BR>运行结果如下：<BR>emp_id e_wage<BR>-------- ---------------------<BR>10010001 8000.0000<BR>......（因数据太多故省略之）</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>例4-2：查询表的全部数据</STRONG><BR>use pangu<BR>select *<BR>from employee<BR><BR>运行结果如下<BR>emp_id e_name birthday job_level dept_id hire_date e_wage<BR>-------- -------------------- --------------------------- --------- ------- ---------------------------<BR>10010001 张三 1968-02-14 00:00:00.000 1 1001 1996-08-02 00:00:00.000 8000.0000<BR>......<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>例4-3：查询工作级别为"2"的员工姓名，查询结果按部门分组</STRONG><BR>use pangu<BR>select e_name， dept_id<BR>from employee<BR>where job_level = '2'<BR>group by dept_id e_name</P>
<P>运行结果如下：<BR>e_name dept_id<BR>-------------------- -------<BR>李四 1001<BR>......</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;以上是对SQL 语言的简单介绍,对没有接触过SQL 语言的读者,看了这一节就算入门了.我们在后面的章节中会用到更多类型的SQL 语句,Step By Step,您会成为SQL 高手。 <BR class=style2></P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=middle height=40>&nbsp;</TD></TR>
<TR>
<TD class=pagefont align=middle height=60><A href="http://www.ddvip.net/database/mssql/index1/10.htm"><FONT color=#002c99>上一篇</FONT></A>&nbsp; &nbsp; &nbsp; <A href="http://www.ddvip.net/database/mssql/index1/index.htm"><FONT color=#002c99>目录</FONT></A>&nbsp; &nbsp; &nbsp; <A href="http://www.ddvip.net/database/mssql/index1/12.htm"><FONT color=#002c99>下一篇</FONT></A> </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:11 <a href="http://www.blogjava.net/plpa/articles/2905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库范式</title><link>http://www.blogjava.net/plpa/articles/2904.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2904.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2904.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2904.html</trackback:ping><description><![CDATA[构造数据库必须遵循一定的规则。在关系数据库中，这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求，即满足不同的范式。目前关系数据库有六种范式：第一范式（1NF）、第二范式（2NF）、第三范式（3NF）、第四范式（4NF）、第五范式（5NF）和第六范式（6NF）。满足最低要求的范式是第一范式（1NF）。在第一范式的基础上进一步满足更多要求的称为第二范式（2NF），其余范式以次类推。一般说来，数据库只需满足第三范式（3NF）就行了。下面我们举例介绍第一范式（1NF）、第二范式（2NF）和第三范式（3NF）。<BR><BR><SPAN class=style2>3.4.1 第一范式（1NF）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;在任何一个关系数据库中，第一范式（1NF）是对关系模式的基本要求，不满足第一范式（1NF）的数据库就不是关系数据库。<BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓第一范式（1NF）是指数据库表的每一列都是不可分割的基本数据项，同一列中不能有多个值，即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性，就可能需要定义一个新的实体，新的实体由重复的属性构成，新实体与原实体之间为一对多关系。在第一范式（1NF）中表的每一行只包含一个实例的信息。例如，对于图3-2 中的员工信息表，不能将员工信息都放在一列中显示，也不能将其中的两列或多列在一列中显示；员工信息表的每一行只表示一个员工的信息，一个员工的信息在表中只出现一次。简而言之，第一范式就是无重复的列。
<P><SPAN class=style2>3.4.2 第二范式（2NF）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;第二范式（2NF）是在第一范式（1NF）的基础上建立起来的，即满足第二范式（2NF）必须先满足第一范式（1NF）。第二范式（2NF）要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列，以存储各个实例的惟一标识。如<BR>图3-2 员工信息表中加上了员工编号（emp_id）列，因为每个员工的员工编号是惟一的，因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;第二范式（2NF）要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性，如果存在，那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体，新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列，以存储各个实例的惟一标识。简而言之，第二范式就是非主属性非部分依赖于主关键字。</P>
<P><SPAN class=style2>3.4.3 第三范式（3NF）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;满足第三范式（3NF）必须先满足第二范式（2NF）。简而言之，第三范式（3NF）要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如，存在一个部门信息表，其中每个部门有部门编号（dept_id）、部门名称、部门简介等信息。那么在图3-2<BR>的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表，则根据第三范式（3NF）也应该构建它，否则就会有大量的数据冗余。简而言之，第三范式就是属性不依赖于其它非主属性。 <BR></P><img src ="http://www.blogjava.net/plpa/aggbug/2904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:08 <a href="http://www.blogjava.net/plpa/articles/2904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库2</title><link>http://www.blogjava.net/plpa/articles/2903.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2903.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2903.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2903.html</trackback:ping><description><![CDATA[数据库对象是数据库的组成部分，常见的有以下几种：<BR><BR><SPAN class=style2>3.3.1 表（Table ）<BR></SPAN>&nbsp;&nbsp;&nbsp;&nbsp;数据库中的表与我们日常生活中使用的表格类似，它也是由行（Row） 和列（Column）组成的。图3-1 中黑底白字的部分称为行，图3-2 中黑底白字的部分称为列。列由同类的信息组成，每列又称为一个字段，每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录，它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成，没有记录的表称为空表。每个表中通常都有一个主关键字，用于惟一地确定一条记录，如图3-1 中的emp_id 列。图3-1 中的第一条记录，即第一行数据所表达的信息为：编号为10010001 的员工叫张三，性别男，出生于1968 年2 月14 日，工作级别为1 ，工<BR>作部门编号为1001， 受雇日期是1996 年8 月2 日，月工资是8000 元。<BR><IMG height=485 src="http://www.ddvip.net/database/mssql/index1/img/21.JPG" width=636> <BR><BR><SPAN class=style2>3.3.2 索引（Index）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径，并且可监督表的数据，使其索引所指向的列中的数据不重复。如图3-3 所示。<BR><IMG height=344 src="http://www.ddvip.net/database/mssql/index1/img/22.JPG" width=517><BR><BR><SPAN class=style2>3.3.3 视图（View）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;视图看上去同表似乎一模一样，具有一组命名的字段和数据项，但它其实是一个虚拟的表，在数据库中并不实际存。在视图是由查询数据库表产生的，它限制了用户能看到和修改的数据。由此可见，视图可以用来控制用户对数据的访问，并能简化数据的显示，即通过视图只显示那些需要的数据信息。例如：<BR>&nbsp;&nbsp;&nbsp;&nbsp;从图3-2 中抽取字段员工编号emp_id、员工姓名e_name、员工部门编号dept_id、员<BR>工工资e_wage 组成一个员工工资信息表。如图3-4 所示。<BR><IMG height=159 src="http://www.ddvip.net/database/mssql/index1/img/23.JPG" width=600><BR>&nbsp;&nbsp;&nbsp;&nbsp;从图3-2 中抽取数据组成工作级别（job_level）为2 的员工信息表。如图3-5 所示。<BR><IMG height=135 src="http://www.ddvip.net/database/mssql/index1/img/24.JPG" width=638><BR><BR><SPAN class=style2>3.3.4 图表（Diagram）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;在SQL Server 中图表其实就是数据库表之间的关系示意图。利用它可以编辑表与表之间的关系。如图3-6 所示。<BR><IMG height=308 src="http://www.ddvip.net/database/mssql/index1/img/25.JPG" width=583><BR><BR><SPAN class=style2>3.3.5 缺省值（Default）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;缺省值是当在表中创建列或插入数据时，对没有指定其具体值的列或列数据项赋予事先设定好的值。如图3-7 所示。<BR><IMG height=263 src="http://www.ddvip.net/database/mssql/index1/img/26.JPG" width=526><BR><BR><SPAN class=style2>3.3.6 规则（Rule）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;规则是对数据库表中数据信息的限制。它限定的是表的列。如图3-8 所示。<BR><IMG height=367 src="http://www.ddvip.net/database/mssql/index1/img/27.JPG" width=554><BR><BR><SPAN class=style2>3.3.7 触发器（Trigger）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;触发器是一个用户定义的SQL 事务命令的集合。当对一个表进行插入、更改、删除时，这组命令就会自动执行。如图3-9 所示。<BR><IMG height=366 src="http://www.ddvip.net/database/mssql/index1/img/28.JPG" width=574><BR><BR><SPAN class=style2>3.3.8 存储过程（Stored Procedure）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句，经编译后存储在数据库中的SQL 程序。如图3-10 所示。<BR><IMG height=316 src="http://www.ddvip.net/database/mssql/index1/img/29.JPG" width=547><BR><BR><SPAN class=style2>3.3.9 用户（User）</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓用户就是有权限访问数据库的人。<BR>&nbsp;&nbsp;&nbsp;&nbsp;数据库对象还有很多<BR><img src ="http://www.blogjava.net/plpa/aggbug/2903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:07 <a href="http://www.blogjava.net/plpa/articles/2903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库</title><link>http://www.blogjava.net/plpa/articles/2902.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2902.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2902.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2902.html</trackback:ping><description><![CDATA[数据库这一概念提出后，先后出现了几种数据模型。其中基本的数据模型有三种：层次模型系统、网络模型系统、和关系模型系统。60 年代末期提出的关系模型具有数据结构简单灵活、易学易懂且具有雄厚的数学基础等特点，从70 年代开始流行，发展到现在已成为数据库的标准。目前广泛使用的数据库软件都是基于关系模型的关系数据库管理系统。<BR><BR><SPAN class=style2>3.2.1 关系模型(RM 即Relational Model)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;关系模型把世界看作是由实体(Entity)和联系(Relationship)构成的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓实体就是指现实世界中具有区分与其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例，表的每一列描述实体的一个特征或属性。<BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓联系就是指实体之间的关系，即实体之间的对应关系。联系可以分为三种：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·一对一的联系。如：一个人只有一种性别，一个人→性别为一对一的联系；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·一对多的联系。如：相同性别的人有许多个，性别→人为一对多的联系；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·多对一的联系。如：很多人有同一个性别，人→性别为多对一的联系。<BR>&nbsp;&nbsp;&nbsp;&nbsp;通过联系就可以用一个实体的信息来查找另一个实体的信息。<BR>&nbsp;&nbsp;&nbsp;&nbsp;关系模型把所有的数据都组织到表中。表是由行和列组成的，行表示数据的记录，列表示记录中的域。表反映了现实世界中的事实和值。<BR><SPAN class=style2><BR>3.2.2 关系数据库(RDB 即Relational Database)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓关系数据库就是基于关系模型的数据库。<BR>&nbsp;&nbsp;&nbsp;&nbsp;1、关系数据库管理系统(RDBMS)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·关系数据库管理系统就是管理关系数据库的计算机软件。<BR>&nbsp;&nbsp;&nbsp;&nbsp;2、关键字(Key)<BR>&nbsp;&nbsp;&nbsp;&nbsp;关键字是关系模型中的一个重要概念，它是逻辑结构，不是数据库的物理部分。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·侯选关键字（Candidate Key）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果一个属性集能惟一地标识表的一行而又不含多余的属性，那么这个属性集称为侯选关键字。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·主关键字（Primary Key）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主关键字是被挑选出来，作表的行的惟一标识的侯选关键字。一个表只有一个主关键字。主关键字又可以称为主键。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·公共关键字（Common Key）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在关系数据库中，关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组，那么这个属性或属性组被称为这两个关系的公共关键字。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;·外关键字（Foreign Key）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果公共关键字在一个关系中是主关键字，那么这个公共关键字被称为另一个关系的外关键字。由此可见，外关键字表示了两个关系之间的联系。以另一个关系的外关键字作主关键字的表被称为主表，具有此外关键字的表被称为主表的从表。外关键字又称作外键。<BR><img src ="http://www.blogjava.net/plpa/aggbug/2902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:06 <a href="http://www.blogjava.net/plpa/articles/2902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库快速学习（1）</title><link>http://www.blogjava.net/plpa/articles/2901.html</link><dc:creator>噼里啪啦的世界</dc:creator><author>噼里啪啦的世界</author><pubDate>Thu, 07 Apr 2005 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/plpa/articles/2901.html</guid><wfw:comment>http://www.blogjava.net/plpa/comments/2901.html</wfw:comment><comments>http://www.blogjava.net/plpa/articles/2901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/plpa/comments/commentRss/2901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/plpa/services/trackbacks/2901.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD style="BORDER-BOTTOM: #ff99ff 1px dashed" align=middle height=50><STRONG class=f16>数据库-基本概念</STRONG></TD></TR>
<TR>
<TD align=middle height=40>作者：unknown 更新时间：2005-03-17 </TD>
<TD style="BORDER-RIGHT: #ff99ff 1px solid" vAlign=top rowSpan=6>&nbsp;</TD></TR>
<TR>
<TD height=40>&nbsp;</TD></TR>
<TR>
<TD>
<TABLE class=pagefont cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<P><BR><SPAN class=style2>3.1.1 数据(Data)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;所谓数据就是描述事物的符号.在我们的日常生活中,数据无所不,在数字、文字、图表、图象、声音等都是数据。人们通过数据来认识世界，交流信息。<BR><BR><SPAN class=style2>3.1.2 数据库(DB 即Database)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;数据库，顾名思义，就是数据存放的地方。在计算机中，数据库是数据和数据库对象的集合。所谓数据库对象是指表(Table)、视图(View)、存储过程(Stored Procedure)、触发器(Trigger) 等。这些数据库对象将在以后的章节中介绍。<BR><BR><SPAN class=style2>3.1.3 数据库管理系统(DBMS)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;数据库管理系统是用于管理数据的计算机软件。数据库管理系统使用户能方便地定义和操纵数据，维护数据的安全性和完整性，以及进行多用户下的并发控制和恢复数据库。<BR><BR><SPAN class=style2>3.1.4 数据库系统(DBS 即Database System)</SPAN><BR>&nbsp;&nbsp;&nbsp;&nbsp;数据库系统狭义地讲是由数据库、数据库管理系统和用户构成、广义地讲是由计算机硬件、操作系统、数据库管理系统以及在它支持下建立起来的数据库、应用程序、用户和维护人员组成的一个整体。<BR></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/plpa/aggbug/2901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/plpa/" target="_blank">噼里啪啦的世界</a> 2005-04-07 12:00 <a href="http://www.blogjava.net/plpa/articles/2901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>