﻿<?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博客-IT小小鸟的学习日记-随笔分类-数据库</title><link>http://www.cnitblog.com/lenatem/category/8264.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 13:40:47 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 13:40:47 GMT</pubDate><ttl>60</ttl><item><title>SQL Server中容易混淆的数据类型</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/15/60134.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Wed, 15 Jul 2009 12:12:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/15/60134.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/60134.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/15/60134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/60134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/60134.html</trackback:ping><description><![CDATA[<p>(1)char、varchar、text和nchar、nvarchar、ntext</p>
<p>char和varchar的长度都在1到8000之间，它们的区别在于char是定长字符数据，而varchar是变长字符数据。所谓定长就是长度固定的，当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充，使长度达到相应的长度；而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据，最大长度为2^31-1(2,147,483,647)个字符。</p>
<p>后面三种数据类型和前面的相比，从名称上看只是多了个字母"n"，它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中，英文字符只需要一个字节存储就足够了，但汉字众多，需要两个字节存储，英文与汉字同时存在时容易造成混乱，Unicode字符集就是为了解决字符集这种不兼容的问题而产生的，它所有的字符都用两个字节表示，即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较：nchar、nvarchar则最多存储4000个字符，不论是英文还是汉字；而char、varchar最多能存储8000个英文，4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字，较为方便，但在存储英文时数量上有些损失。</p>
<p>(2)datetime和smalldatetime</p>
<p>datetime：从1753年1月1日到9999年12月31日的日期和时间数据，精确到百分之三秒。</p>
<p>smalldatetime：从1900年1月1日到2079年6月6日的日期和时间数据，精确到分钟。</p>
<p>(3)bitint、int、smallint、tinyint和bit</p>
<p>bigint：从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。</p>
<p>int：从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。</p>
<p>smallint：从-2^15(-32,768)到2^15-1(32,767)的整数数据。</p>
<p>tinyint：从0到255的整数数据。</p>
<p>bit：1或0的整数数据。</p>
<p>(4)decimal和numeric</p>
<p>这两种数据类型是等效的。都有两个参数：p（精度）和s（小数位数）。p指定小数点左边和右边可以存储的十进制数字的最大个数，p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数，s必须是从0到p之间的值，默认小数位数是0。</p>
<p>(5)float和real</p>
<p>float：从-1.79^308到1.79^308之间的浮点数字数据。</p>
<p>real：从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中，real的同义词为float(24)。<br><br>摘自：<a href="http://www.webjx.com/database/sqlserver-142.htm">http://www.webjx.com/database/sqlserver-142.htm</a></p>
<img src ="http://www.cnitblog.com/lenatem/aggbug/60134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-15 20:12 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/15/60134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/07/59921.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Tue, 07 Jul 2009 11:19:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/07/59921.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/59921.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/07/59921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/59921.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/59921.html</trackback:ping><description><![CDATA[摘自：<a href="http://www.techrss.cn/html/2009/04-12/236165.htm">http://www.techrss.cn/html/2009/04-12/236165.htm</a><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天在安装SQL Server 2005时，出现&#8220;性能监视器计数器要求&#8221;错误，因为以前出现过这种错误，得到了解决。今天又又出现这种错误，但并不是很清楚当时的解决办法，所以这次把解决方法记录下来，供自己以后参考，也希望对大家有帮助。
<p><o:p></o:p></p>
<p>　　 错误原因<o:p></o:p></p>
<p>　　 造成这种错误的原因在于Microsoft SQL Server 安装程序中的安装配置检查器 (SCC)在安装SQL Server前会验证计数器注册表项的值。如果 SCC 无法验证现有的注册表项，或 SCC 无法运行 lodctr.exe 系统程序，则 SCC 检查会失败，致使安装受阻。<o:p></o:p></p>
<p>　　解决办法(手动设置计数器注册表项的增量)<o:p></o:p></p>
<p>　　&#252;　 解决办法一<o:p></o:p></p>
<p>　　1.　　 在Windows Server 2003或者Windows Xp中，依次单击&#8220;开始&#8221;，&#8220;运行&#8221;，然后在&#8220;打开&#8221;中输入&#8220;regedit&#8221;单击&#8220;确定&#8221;打开注册表，在Windows 2000中输入&#8220;regedt32&#8221;打开注册表。<o:p></o:p></p>
<p>　　2.　　 定位到注册表项：<o:p></o:p></p>
<p><code>[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionPerflib]<br>"Last Counter"=dword:00000ed4 (5276)<br>"LastHelp"=dword:00000ed5 (5277)</code></p>
<p><o:p></o:p></p>
<p>　　3.　　 第2步中的&#8220;Last Counter&#8221;值 (5276) 必须与以下注册表项中&#8220;Perflib09&#8221;的&#8220;Counter&#8221;项的最大值匹配，并且第2步中的&#8220;Last Help&#8221;值 (5277) 必须与以下注册表项中&#8220;Perflib09&#8221;的&#8220;Help&#8221;项的最大值匹配。（注意：Perflib中有两个子项004和009，004代表中文，009代表英文。）<o:p></o:p></p>
<p><code>[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPerflib09]</code></p>
<p><o:p></o:p></p>
<p>　　&#8220;Last Counter&#8221;和&#8220;Last Help&#8221;值是由 Windows 动态分配的；这两个值会因计算机的不同而不同。<o:p></o:p></p>
<p>　　4.　　 如果完成第3步还无法安装的话，可修改&#8220;Perflib&#8221;项中的&#8220;Last Counter&#8221;和&#8220;Last Help&#8221;值的值。右键单击&#8220;Last Counter&#8221;或&#8220;Last Help&#8221;，单击&#8220;修改&#8221;，再单击&#8220;Base = "Decimal"&#8221;，在&#8220;值数据&#8221;中设置值，再单击&#8220;确定&#8221;。如有必要，对另一个项重复以上过程，然后关闭注册表编辑器。<o:p></o:p></p>
<p>　　&#252;　 解决办法二<o:p></o:p></p>
<p>　　1.　　 运行cmd，然后执行<o:p></o:p></p>
<p><code>unlodctr w3svc <br>unlodctr msftpsvc <br>unlodctr asp<br>unlodctr inetinfo</code></p>
<p><o:p></o:p></p>
<p>　　以上是将四个计数器都删除<o:p></o:p></p>
<p>　　2.　　 以下重新安装计数器<o:p></o:p></p>
<p><code>lodctr w3ctrs.ini<br>lodctr ftpctrs.ini<br>lodctr axperf.ini<br>lodctr infoctrs.ini</code></p>
<p><o:p></o:p></p>
<p>　　 一般情况下第一种方法就可以解决问题，第一种方法中更改的值只需比当前的值大就可以，没有限制。第二种方法是备用方法。<span lang=EN-US style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-fareast-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-ascii-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast"><o:p></o:p></span></p>
<img src ="http://www.cnitblog.com/lenatem/aggbug/59921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-07 19:19 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/07/59921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句不完全匹配查询</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/07/59920.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Tue, 07 Jul 2009 11:18:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/07/59920.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/59920.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/07/59920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/59920.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/59920.html</trackback:ping><description><![CDATA[<p>表（学校信息表）情况如下：<br><br>学校&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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>
安康中学初中部&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 李先生<br>安康中学高中部&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 李小姐<br><br><br>执行如下SQL 语句<br>use test<br>select * from 学校信息表 where 学校 like '%安康中学%'<br><br>执行结果为<br>安康中学初中部&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 李先生<br>安康中学高中部&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 李小姐
<img src ="http://www.cnitblog.com/lenatem/aggbug/59920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-07 19:18 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/07/59920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于安装SQL2005 版本变更警告</title><link>http://www.cnitblog.com/lenatem/archive/2009/07/07/59900.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Tue, 07 Jul 2009 02:55:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/07/07/59900.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/59900.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/07/07/59900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/59900.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/59900.html</trackback:ping><description><![CDATA[SQL Server 版本变更检查 警告 <br>1,退出安装程序， <br>2,通过开始--&gt;运行--&gt;cmd <br>3,输入你的 安装程序（step.exe）的路径+ 空格+SKUUPGRADE=1 <br>如： <br>C:\Documents and Settings\Administrator&gt;"D:\工具\Microsoft Sql Server 2005 Enter <br>prise\Servers\setup.exe" SKUUPGRADE=1
<img src ="http://www.cnitblog.com/lenatem/aggbug/59900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-07-07 10:55 <a href="http://www.cnitblog.com/lenatem/archive/2009/07/07/59900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL2005的数据类型详解</title><link>http://www.cnitblog.com/lenatem/archive/2009/06/15/59399.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Mon, 15 Jun 2009 11:24:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/06/15/59399.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/59399.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/06/15/59399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/59399.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/59399.html</trackback:ping><description><![CDATA[<p><span></span>&nbsp;</p>
在计算机中数据有两种<wbr>特征：类型和长度。所<wbr>谓数据类型就是以数据<wbr>的表现方式和存储方式<wbr>来划分的数据的种类。<br>&nbsp;&nbsp;&nbsp; 在SQL Server 中每个变量、参数、表<wbr>达式等都有数据类型。<wbr>系统提供的数据类型分<wbr>为几大类，如表4-2<wbr> 所示。<br><br>&nbsp;&nbsp;&nbsp; 其中，BIGINT、<wbr> SQL_VARIAN<wbr>T 和TABLE 是SQL Server 2000 中新增加的3 种数据类型。下面分类<wbr>讲述各种数据类型。<br><br>一、 整数数据类型<br>&nbsp;&nbsp;&nbsp; 整数数据类型是最常用<wbr>的数据类型之一。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、INT （INTEGER）<br>INT （或INTEGER）<wbr>数据类型存储从-2的<wbr>31次方 （-2 ，147 ，483 ，648） 到2的31次方-1 （2 ，147 ，483，647） 之间的所有正负整数。<wbr>每个INT 类型的数据按4 个字节存储，其中1 位表示整数值的正负号<wbr>，其它31 位表示整数值的长度和<wbr>大小。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、SMALLINT<br>SMALLINT 数据类型存储从-2的<wbr>15次方（ -32， 768） 到2的15次方-1（<wbr> 32 ，767 ）之间的所有正负整数<wbr>。每个SMALLIN<wbr>T 类型的数据占用2 个字节的存储空间，其<wbr>中1 位表示整数值的正负号<wbr>，其它15 位表示整数值的长度和<wbr>大小。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、TINYINT<br>TINYINT数据类<wbr>型存储从0 到255 之间的所有正整数。每<wbr>个TINYINT类型<wbr>的数据占用1 个字节的存储空间。<br>&nbsp;&nbsp;&nbsp;&nbsp; 4、BIGINT<br>BIGINT 数据类型存储从-2^<wbr>63 （-9 ，223， 372， 036， 854， 775， 807） 到2^63-1（ 9， 223， 372， 036 ，854 ，775， 807） 之间的所有正负整数。<wbr>每个BIGINT 类型的数据占用8个字<wbr>节的存储空间。<br><br>二、 浮点数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; 浮点数据类型用于存储<wbr>十进制小数。浮点数值<wbr>的数据在SQL Server 中采用上舍入（Rou<wbr>nd up 或称为只入不舍）方式<wbr>进行存储。所谓上舍入<wbr>是指，当（且仅当）要<wbr>舍入的数是一个非零数<wbr>时，对其保留数字部分<wbr>的最低有效位上的数值<wbr>加1 ，并进行必要的进位。<wbr>若一个数是上舍入数，<wbr>其绝对值不会减少。如<wbr>：对3.141592<wbr>65358979 分别进行2 位和12位舍入，结果<wbr>为3.15 和3.1415926<wbr>53590。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、REAL 数据类型<br>REAL数据类型可精<wbr>确到第7 位小数，其范围为从-<wbr>3.40E -38 到3.40E +38。 每个REAL类型的数<wbr>据占用4 个字节的存储空间。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、FLOAT<br>FLOAT 数据类型可精确到第1<wbr>5 位小数，其范围为从-<wbr>1.79E -308 到1.79E +308。 每个FLOAT 类型的数据占用8 个字节的存储空间。 FLOAT数据类型可<wbr>写为FLOAT[ n ]的形式。n 指定FLOAT 数据的精度。n 为1到15 之间的整数值。当n 取1 到7 时，实际上是定义了一<wbr>个REAL 类型的数据，系统用4<wbr> 个字节存储它；当n 取8 到15 时，系统认为其是FL<wbr>OAT 类型，用8 个字节存储它。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、DECIMAL<br>DECIMAL数据类<wbr>型可以提供小数所需要<wbr>的实际存储空间，但也<wbr>有一定的限制，您可以<wbr>用2 到17 个字节来存储从-10<wbr>的38次方-1 到10的38次方-1<wbr> 之间的数值。可将其写<wbr>为DECIMAL[ p [s] ]的形式，p 和s 确定了精确的比例和数<wbr>位。其中p 表示可供存储的值的总<wbr>位数（不包括小数点）<wbr>，缺省值为18； s 表示小数点后的位数，<wbr>缺省值为0。 例如：decimal<wbr> （15 5），表示共有15 位数，其中整数10 位，小数5。 位表4-3 列出了各精确度所需的<wbr>字节数之间的关系。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 4、NUMERIC<br>NUMERIC数据类<wbr>型与DECIMAL数<wbr>据类型完全相同。<br>注意：SQL Server 为了和前端的开发工具<wbr>配合，其所支持的数据<wbr>精度默认最大为28位<wbr>。但可以通过使用命令<wbr>来执行sqlserv<wbr>er.exe程序以启<wbr>动SQL Server，可改变<wbr>默认精度。命令语法如<wbr>下：SQLSERVR<wbr>[/D master_dev<wbr>ice_path][<wbr>/P precisim_l<wbr>eve1]<br>&nbsp;&nbsp;&nbsp; 例4-4: 用最大数据精度38 启动SQL Server<br>sqlservr /d c:\ Mssql2000\<wbr>data\maste<wbr>r.dat /p38<br>/*在使用了/P 参数后,如果其后没有<wbr>指定具体的精度数值,<wbr>则默认为38 位./*<br><br>三、二进制数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、BINARY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BINARY 数据类型用于存储二进<wbr>制数据。其定义形式为<wbr>BINARY（ n）， n 表示数据的长度，取值<wbr>为1 到8000 。在使用时必须指定B<wbr>INARY 类型数据的大小，至少<wbr>应为1 个字节。BINARY<wbr> 类型数据占用n+4 个字节的存储空间。在<wbr>输入数据时必须在数据<wbr>前加上字符&#8220;0X&#8221; 作为二进制标识，如：<wbr>要输入&#8220;abc &#8221;则应输入&#8220;0xab<wbr>c &#8221;。若输入的数据过长<wbr>将会截掉其超出部分。<wbr>若输入的数据位数为奇<wbr>数，则会在起始符号&#8220;<wbr>0X &#8221;后添加一个0，如上<wbr>述的&#8220;0xabc &#8221;会被系统自动变为&#8220;<wbr>0x0abc&#8221;。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、VARBINAR<wbr>Y<br>VARBINARY 数据类型的定义形式为<wbr>VARBINARY（<wbr>n）。 它与BINARY 类型相似，n 的取值也为1 到8000，若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。不同的是V<wbr>ARBINARY数据<wbr>类型具有变动长度的特<wbr>性，因为VARBIN<wbr>ARY数据类型的存储<wbr>长度 为实际数值长度+4个<wbr>字节。当BINARY<wbr>数据类型允许NULL<wbr> 值时，将被视为VAR<wbr>BINARY数据类型<wbr>。<br>一般情况下，由于BI<wbr>NARY 数据类型长度固定，因<wbr>此它比VARBINA<wbr>RY 类型的处理速度快。<br><br>四、 逻辑数据类型<br>&nbsp;&nbsp;&nbsp; BIT： BIT数据类型占用1<wbr> 个字节的存储空间，其<wbr>值为0 或1 。如果输入0 或1 以外的值，将被视为1<wbr>。 BIT 类型不能定义为NUL<wbr>L 值（所谓NULL 值是指空值或无意义的<wbr>值）。<br><br>五、字符数据类型<br>&nbsp;&nbsp;&nbsp; 字符数据类型是使用最<wbr>多的数据类型。它可以<wbr>用来存储各种字母、数<wbr>字符号、特殊符号。一<wbr>般情况下，使用字符类<wbr>型数据时须在其前后加<wbr>上单引号&#8217;或双引号&#8221;<wbr> 。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1 CHAR<br>CHAR 数据类型的定义形式为<wbr>CHAR[ （n） 。 以CHAR 类型存储的每个字符和<wbr>符号占一个字节的存储<wbr>空间。n 表示所有字符所占的存<wbr>储空间，n 的取值为1 到8000， 即可容纳8000 个ANSI 字符。若不指定n 值，则系统默认值为1<wbr>。若输入数据的字符数<wbr>小于n，则系统自动在<wbr>其后添加空格来填满设<wbr>定好的空间。若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、NCHAR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NCHAR 数据类型的定义形式为<wbr>NCHAR[ （n）]。 它与CHAR 类型相似。不同的是N<wbr>CHAR数据类型n 的取值为1 到4000。 因为NCHAR 类型采用UNICOD<wbr>E 标准字符集（Char<wbr>acterSet）。<wbr> UNICODE 标准规定每个字符占用<wbr>两个字节的存储空间，<wbr>所以它比非UNICO<wbr>DE 标准的数据类型多占用<wbr>一倍的存储空间。使用<wbr>UNICODE 标准的好处是因其使用<wbr>两个字节做存储单位，<wbr>其一个存储单位的容纳<wbr>量就大大增加了，可以<wbr>将全世界的语言文字都<wbr>囊括在内，在一个数据<wbr>列中就可以同时出现中<wbr>文、 英文、法文、德文等，<wbr>而不会出现编码冲突。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、VARCHAR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR数据类<wbr>型的定义形式为VAR<wbr>CHARn）。 它与CHAR 类型相似，n 的取值也为1 到8000，若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。不同的是，<wbr>VARCHAR数据类<wbr>型具有变动长度的特性<wbr>，因为VARCHAR<wbr>数据类型的存储长度为<wbr>实际 数值长度，若输入数据<wbr>的字符数小于n ，则系统不会在其后添<wbr>加空格来填满设定好的<wbr>空间。<br>一般情况下，由于CH<wbr>AR 数据类型长度固定，因<wbr>此它比VARCHAR<wbr> 类型的处理速度快。<br>&nbsp;&nbsp;&nbsp;&nbsp; 4、NVARCHAR<br>NVARCHAR数据<wbr>类型的定义形式为NV<wbr>ARCHAR[ （n） ]。 它与VARCHAR 类型相似。不同的是，<wbr>NVARCHAR数据<wbr>类型采用UNICOD<wbr>E 标准字符集（Char<wbr>acter Set）， n 的取值为1 到4000。<br><br>六、文本和图形数据类<wbr>型<br>&nbsp;&nbsp;&nbsp; 这类数据类型用于存储<wbr>大量的字符或二进制数<wbr>据。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、TEXT<br>&nbsp;&nbsp;&nbsp;&nbsp; TEXT数据类型用于<wbr>存储大量文本数据，其<wbr>容量理论上为1 到2的31次方-1 （2， 147， 483， 647）个字节，在实<wbr>际应用时需要视硬盘的<wbr>存储空间而定。<br>SQL Server 2000 以前的版本中，数据库<wbr>中一个TEXT 对象存储的实际上是一<wbr>个指针，它指向一个个<wbr>以8KB （8192 个字节）为单位的数据<wbr>页（Data Page）。 这些数据页是动态增加<wbr>并被逻辑链接起来的。<wbr>在SQL Server 2000 中，则将TEXT 和IMAGE 类型的数据直接存放到<wbr>表的数据行中，而不是<wbr>存放到不同的数据页中<wbr>。 这就减少了用于存储T<wbr>EXT 和IMA- GE 类型的空间，并相应减<wbr>少了磁盘处理这类数据<wbr>的I/O 数量。<br>&nbsp;&nbsp;&nbsp; 2 NTEXT<br>&nbsp;&nbsp;&nbsp; NTEXT数据类型与<wbr>TEXT.类型相似不<wbr>同的,是NTEXT 类型采用UNICOD<wbr>E 标准字符集(Char<wbr>acter Set), 因此其理论容量为23<wbr>0-1(1, 073, 741, 823)个字节。<br>&nbsp;&nbsp;&nbsp; 3 IMAGE<br>&nbsp;&nbsp;&nbsp; IMAGE 数据类型用于存储大量<wbr>的二进制数据Bina<wbr>ry Data。其理论容量<wbr>为2的31次方-1(<wbr>2,147,483,<wbr>647)个字节。其存<wbr>储数据的模式与TEX<wbr>T 数据类型相同。通常用<wbr>来存储图形等OLE Object Linking and Embedding，<wbr>对象连接和嵌入）对象<wbr>。在输入数据时同BI<wbr>NARY数据类型一样<wbr>，必须在数据前加上字<wbr>符&#8220;0X&#8221;作为二进制<wbr>标识<br><br>七、 日期和时间数据类型<br>&nbsp;&nbsp;&nbsp; 1 DATETIME<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATETIME 数据类型用于存储日期<wbr>和时间的结合体。它可<wbr>以存储从公元1753<wbr> 年1 月1 日零时起到公元999<wbr>9 年12 月31 日23 时59 分59 秒之间的所有日期和时<wbr>间，其精确度可达三百<wbr>分之一秒，即3.33<wbr> 毫秒。DATETIM<wbr>E 数据类型所占用的存储<wbr>空间为8 个字节。其中前4 个字节用于存储190<wbr>0 年1 月1 日以前或以后的天数，<wbr>数值分正负，正数表示<wbr>在此日期之后的日期，<wbr>负数表示在此日期之前<wbr>的日期。后4 个字节用于存储从此日<wbr>零时起所指定的时间经<wbr>过的毫秒数。如果在输<wbr>入数据时省略了时间部<wbr>分，则系统将12:0<wbr>0:00:000AM<wbr>作为时间缺省值：如果<wbr>省略 了日期部分，则系统将<wbr>1900 年1 月1 日作为日期缺省值。<br>&nbsp;&nbsp;&nbsp; 2 SMALLDATET<wbr>IME<br>SMALLDATET<wbr>IME 数据类型与DATET<wbr>IME 数据类型相似，但其日<wbr>期时间范围较小，为从<wbr>1900 年1 月1 日到2079 年6 月6：日精度较低，只<wbr>能精确到分钟，其分钟<wbr>个位上为根据秒数四舍<wbr>五入的值,即以30 秒为界四舍五入。如：<wbr>DATETIME 时间为14:38:3<wbr>0.283<br>时SMALLDATE<wbr>TIME 认为是14:39:0<wbr>0 SMALLDATET<wbr>IME 数据类型使用4 个字节存储数据。其中<wbr>前2 个字节存储从基础日期<wbr>1900 年1 月1 日以来的天数，后两个<wbr>字节存储此日零时起所<wbr>指定的时间经过的分钟<wbr>数。<br>&nbsp;&nbsp;&nbsp; 下面介绍日期和时间的<wbr>输入格式<br>&nbsp;&nbsp;&nbsp; 日期输入格式<br>&nbsp;&nbsp;&nbsp; 日期的输入格式很多大<wbr>致可分为三类：<br><br>&nbsp;&nbsp;&nbsp; * 英文+数字格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此类格式中月份可用英<wbr>文全名或缩写，且不区<wbr>分大小写；年和月日之<wbr>间可不用逗号；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 年份可为4 位或2 位；当其为两位时，若<wbr>值小于50 则视为20xx 年，若大于或等于50<wbr> 则<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视为19xx 年；若日部分省略，则<wbr>视为当月的1号。以下<wbr>格式均为正确的日期格<wbr>式：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; June 21 2000 Oct 1 1999 January 2000 2000 February<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2000 May 1 2000 1 Sep 99 June July 00<br>&nbsp;&nbsp;&nbsp; * 数字+分隔符格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许把斜杠（/）、连<wbr>接符（-）和小数点（<wbr>.）作为用数字表示的<wbr>年、月、日之间的分<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 隔符。如：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YMD：2000/6<wbr>/22 2000-6-22 2000.6.22<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MDY：3/5/20<wbr>00 3-5-2000 3.5.2000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DMY：31/12/<wbr>1999 31-12-1999<wbr> 31.12.2000<br>&nbsp;&nbsp;&nbsp; * 纯数字格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 纯数字格式是以连续的<wbr>4 位6、位或8 位数字来表示日期。如<wbr>果输入的是6 位或8 位<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数字，系统将按年、月<wbr>、日来识别，即YMD<wbr> 格式，并且月和日都是<wbr>用两位数字来表示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果输入的数字是4 位数，系统认为这4 位数代表年份,其月份<wbr>和日缺省为此年度的1<wbr> 月<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 日。如:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20000601--<wbr>-2000 年6 月1 日 991212---1<wbr>999 年12 月12 日 1998---199<wbr>8 年 ???? <br><br>时间输入格式<br>在输入时间时必须按&#8220;<wbr>小时、分钟、秒、毫秒<wbr>&#8221;的顺序来输入。在其<wbr>间用冒号&#8220;：&#8221;隔开。<wbr>但可将毫秒部分用小数<wbr>点&#8220;.&#8221; 分，隔其后第一位数字<wbr>代表十分之一秒，第二<wbr>位数字代表百分之一秒<wbr>，第三位数字代表千分<wbr>之一秒。当使用12 小时制时用AM。am<wbr> 和PM（pm）分别指<wbr>定时间是午前或午后，<wbr>若不指定，系统默认为<wbr>AM。AM 与PM 均不区分大小写。如：<br>&nbsp;&nbsp;&nbsp; 3:5:7.2pm-<wbr>--下午3 时5 分7 秒200 毫秒<br>&nbsp;&nbsp;&nbsp; 10:23:5.12<wbr>3Am---上午10<wbr> 时23 分5 秒123 毫秒<br>&nbsp;&nbsp;&nbsp; 可以使用SET DATEFORMAT<wbr> 命令来设定系统默认的<wbr>日期-时间格式。<br><br>八、货币数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 货币数据类型用于存储<wbr>货币值。在使用货币数<wbr>据类型时，应在数据前<wbr>加上货币符号，系统才<wbr>能辨识其为哪国的货币<wbr>，如果不加货币符号，<wbr>则默认为&#8220;￥&#8221;。各货<wbr>币符号如图4-2所示<wbr>。<br>&nbsp;&nbsp;&nbsp; 1 MONEY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MONEY 数据类型的数据是一个<wbr>有4 位小数的DECIMA<wbr>L 值，其取值从-2的6<wbr>3次方（-922，3<wbr>37，203，685<wbr>，477.5808到<wbr>2的63次方-1（+<wbr>922，337，20<wbr>3，685， 477.5807），<wbr>数据精度为万分之一货<wbr>币单位。MONEY 数据类型使用8个字节<wbr>存储。<br><br>&nbsp;&nbsp;&nbsp; 2 SMALLMONEY<br>SMALLMONEY<wbr>数据类型类似于MON<wbr>EY 类型，但其存储的货币<wbr>值范围比MONEY数<wbr>据类型小,其取值从-<wbr>214,748.36<wbr>48到+214,74<wbr>8.3647,存储空<wbr>间为4 个字节。<br><br>九、 特定数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 中包含了一些用于数据<wbr>存储的特殊数据类型。<br>&nbsp;&nbsp;&nbsp; 1 TIMESTAMP<br>TIMESTAMP 数据类型提供数据库范<wbr>围内的惟一值此类型相<wbr>当于BINARY8或<wbr>VARBINARY（<wbr>8），但当它所定义的<wbr>列在更新或插入数据行<wbr>时，此列的值会被自动<wbr>更 新，一个计数值将自动<wbr>地添加到此TIMES<wbr>TAMP数据列中。每<wbr>个数据库表中只能有一<wbr>个TIMESTAMP<wbr>数据列。如果建立一个<wbr>名为 &#8220;TIMESTAMP<wbr>&#8221;的列，则该列的类型<wbr>将被自动设为TIME<wbr>STAMP数据类型。<br>&nbsp;2 UNIQUEIDEN<wbr>TIFIER<br>UNIQUEIDEN<wbr>TIFIER 数据类型存储一个16<wbr> 位的二进制数字。此数<wbr>字称为（GUIDGl<wbr>obally Unique Identifier<wbr> ，即全球惟一鉴别号）<wbr>。此数字由SQLSe<wbr>rver 的NEWID函数产生<wbr>的全球惟一的编码，在<wbr>全球各地的计算机经由<wbr>此函数产生的数字不会<wbr>相同。<br><br>十、用户自定义数据类<wbr>型<br>SYSNAME SYSNAME 数据类型是系统提供给<wbr>用户的，便于用户自定<wbr>义数据类型。它被定义<wbr>为NVARCHAR（<wbr>128），即它可存储<wbr>128个UNICOD<wbr>E字符或256个一般<wbr>字符。其具体使用方法<wbr>请参见第7章&#8220;管理数<wbr>据库表&#8221;中的&#8220;自定义<wbr>数据类型&#8221;章节。<br><br>十一、 新数据类型<br>SQL Server 2000 中增加了3 种数据类型：BIGI<wbr>NT、SQL_VAR<wbr>IANT和TABLE<wbr>。其中BIGINT数<wbr>据类型已在整数类型中<wbr>介绍，下面介绍其余两<wbr>种：<br>&nbsp;&nbsp;&nbsp; 1 SQL_VARIAN<wbr>T<br>SQL_VARIAN<wbr>T数据类型可以存储除<wbr>文本、图形数据（TE<wbr>XT、NTEXT、I<wbr>MAGE）和TIME<wbr>STAMP类型数据外<wbr>的其它任何合法的SQ<wbr>L Server数据。此<wbr>数据类型大大方便了S<wbr>QL Server的开发工<wbr>作。<br>&nbsp;&nbsp;&nbsp; 2 TABLE<br>TABLE 数据类型用于存储对表<wbr>或视图处理后的结果集<wbr>。这一新类型使得变量<wbr>可以存储一个表，从而<wbr>使函数或过程返回查询<wbr>结果更加方便快、捷其<wbr>、使用请参见第13章<wbr>&#8220;游标、视图和自定义<wbr>函数&#8221;。&nbsp;
<img src ="http://www.cnitblog.com/lenatem/aggbug/59399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-06-15 19:24 <a href="http://www.cnitblog.com/lenatem/archive/2009/06/15/59399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL时间函数详细说明</title><link>http://www.cnitblog.com/lenatem/archive/2009/05/04/56906.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Mon, 04 May 2009 09:05:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/05/04/56906.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/56906.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/05/04/56906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/56906.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/56906.html</trackback:ping><description><![CDATA[<p><font face=宋体 color=#000000 size=2>1. 当前系统日期、时间<br>select getdate() <br>2. dateadd 在向指定日期加上一段时间的基础上，返回新的 datetime 值<br>例如：向日期加上2天<br>select dateadd(day,2,'2004-10-15') --返回：2004-10-17 00:00:00.000</font></p>
<p><font face=宋体 color=#000000 size=2>3. datediff 返回跨两个指定日期的日期和时间边界数。<br>select datediff(day,'2004-09-01','2004-09-18') --返回：17</font></p>
<p><font face=宋体 color=#000000 size=2>4. datepart 返回代表指定日期的指定日期部分的整数。<br>SELECT DATEPART(month, '2004-10-15') --返回 10</font></p>
<p><font face=宋体 color=#000000 size=2>5. datename 返回代表指定日期的指定日期部分的字符串<br>SELECT datename(weekday, '2004-10-15') --返回：星期五</font></p>
<p><font face=宋体 color=#000000 size=2>6. day(), month(),year() --可以与datepart对照一下</font></p>
<p><font face=宋体 color=#000000 size=2>select 当前日期=convert(varchar(10),getdate(),120)<br>,当前时间=convert(varchar(8),getdate(),114)</font></p>
<p><font face=宋体 color=#000000 size=2>select datename(dw,'2004-10-15')</font></p>
<p><font face=宋体 color=#000000 size=2>select 本年第多少周=datename(week,'2004-10-15')<br>,今天是周几=datename(weekday,'2004-10-15')</font></p>
<p><font face=宋体 color=#000000 size=2>函数 参数/功能 <br>GetDate( ) 返回系统目前的日期与时间 <br>DateDiff (interval,date1,date2) 以interval 指定的方式，返回date2 与date1两个日期之间的差值 date2-date1 <br>DateAdd (interval,number,date) 以interval指定的方式，加上number之后的日期 <br>DatePart (interval,date) 返回日期date中，interval指定部分所对应的整数值 <br>DateName (interval,date) 返回日期date中，interval指定部分所对应的字符串名称 </font></p>
<p><font face=宋体 color=#000000 size=2>参数 interval的设定值如下：</font></p>
<p><font face=宋体 color=#000000 size=2>值 缩 写（Sql Server） Access 和 ASP 说明 <br>Year Yy yyyy 年 1753 ~ 9999 <br>Quarter Qq q 季 1 ~ 4 <br>Month Mm m 月1 ~ 12 <br>Day of year Dy y 一年的日数,一年中的第几日 1-366 <br>Day Dd d 日，1-31 <br>Weekday Dw w 一周的日数，一周中的第几日 1-7 <br>Week Wk ww 周，一年中的第几周 0 ~ 51 <br>Hour Hh h 时0 ~ 23 <br>Minute Mi n 分钟0 ~ 59 <br>Second Ss s 秒 0 ~ 59 <br>Millisecond Ms - 毫秒 0 ~ 999 </font></p>
<p><font face=宋体 color=#000000 size=2>access 和 asp 中用date()和now()取得系统日期时间；其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中，这些函数的用法也类似</font></p>
<p><font face=宋体 color=#000000 size=2>举例：<br>1.GetDate() 用于sql server :select GetDate()</font></p>
<p><font face=宋体 color=#000000 size=2>2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒<br>DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天</font></p>
<p><font face=宋体 color=#000000 size=2>3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1，周六为7)<br>DatePart('d','2005-7-25 22:56:32')返回值为 25即25号<br>DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天<br>DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年 </font></p>
<p><font face=宋体 color=#000000 size=2>SQL Server DATEPART() 函数返回 SQLServer datetime 字段的一部分。 </font></p>
<p><font face=宋体 color=#000000 size=2>SQL Server DATEPART() 函数的语法是： <br>DATEPART(portion, datetime)<br>其中 datetime 是 SQLServer datetime 字段和部分的名称是下列之一： Ms for Milliseconds<br>Yy for Year<br>Qq for Quarter of the Year<br>Mm for Month<br>Dy for the Day of the Year<br>Dd for Day of the Month<br>Wk for Week<br>Dw for the Day of the Week<br>Hh for Hour<br>Mi for Minute<br>Ss for Second</font></p>
<p><font face=宋体 color=#000000 size=2>详细的说明:</font></p>
<p><font face=宋体 color=#000000 size=2>通常，你需要获得当前日期和计算一些其他的日期，例如，你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割（年、月、日等），然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期！在这篇文章里，我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 <br>在使用本文中的例子之前，你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样，这完全由哪一天是一个星期的第一天这个设置决定。第一天（DATEFIRST）设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立，也就是第一天设置为7。假如你的第一天设置不一样，你可能需要调整这些例子，使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。 </font></p>
<p><font face=宋体 color=#000000 size=2>为了理解这些例子，我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。 </font></p>
<p><font face=宋体 color=#000000 size=2>使用DATEDIFF和DATEADD函数来计算日期，和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如，从当前日期到你要得到的日期之间有多少时间间隔，或者，从今天到某一天（比如1900-1-1）之间有多少时间间隔，等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。 </font></p>
<p><font face=宋体 color=#000000 size=2>一个月的第一天 </font></p>
<p><font face=宋体 color=#000000 size=2>第一个例子，我将告诉你如何从当前日期去这个月的最后一天。请注意：这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔，然后进行加减来得到想要计算的日期。 </font></p>
<p><font face=宋体 color=#000000 size=2>这是计算一个月第一天的SQL 脚本： <br>SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) </font></p>
<p><font face=宋体 color=#000000 size=2>我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate()，大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和&#8220;1900-01-01 00:00:00.000&#8221;这个日期之间的月数。记住：时期和时间变量和毫秒一样是从&#8220;1900-01-01 00:00:00.000&#8221;开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为&#8220;0&#8221;。下一个函数是DATEADD，增加当前日期到&#8220;1900-01-01&#8221;的月数。通过增加预定义的日期&#8220;1900-01-01&#8221;和当前日期的月数，我们可以获得这个月的第一天。另外，计算出来的日期的时间部分将会是&#8220;00:00:00.000&#8221;。 </font></p>
<p><font face=宋体 color=#000000 size=2>这个计算的技巧是先计算当前日期到&#8220;1900-01-01&#8221;的时间间隔数，然后把它加到&#8220;1900-01-01&#8221;上来获得特殊的日期，这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。 </font></p>
<p><br><font face=宋体 color=#000000 size=2>本周的星期一 </font></p>
<p><font face=宋体 color=#000000 size=2>这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) </font></p>
<p><font face=宋体 color=#000000 size=2>一年的第一天 </font></p>
<p><font face=宋体 color=#000000 size=2>现在用年(yy)的时间间隔来显示这一年的第一天。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) </font></p>
<p><font face=宋体 color=#000000 size=2>季度的第一天 </font></p>
<p><font face=宋体 color=#000000 size=2>假如你要计算这个季度的第一天，这个例子告诉你该如何做。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) </font></p>
<p><font face=宋体 color=#000000 size=2>当天的半夜 </font></p>
<p><font face=宋体 color=#000000 size=2>曾经需要通过getdate()函数为了返回时间值截掉时间部分，就会考虑到当前日期是不是在半夜。假如这样，这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) </font></p>
<p><font face=宋体 color=#000000 size=2>深入DATEDIFF和DATEADD函数计算 </font></p>
<p><font face=宋体 color=#000000 size=2>你可以明白，通过使用简单的DATEDIFF和DATEADD函数计算，你可以发现很多不同的可能有意义的日期。 </font></p>
<p><font face=宋体 color=#000000 size=2>目前为止的所有例子只是仅仅计算当前的时间和&#8220;1900-01-01&#8221;之间的时间间隔数量，然后把它加到&#8220;1900-01-01&#8221;的时间间隔上来计算出日期。假定你修改时间间隔的数量，或者使用不同的时间间隔来调用DATEADD函数，或者减去时间间隔而不是增加，那么通过这些小的调整你可以发现和多不同的日期。 </font></p>
<p><font face=宋体 color=#000000 size=2>这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。 </font></p>
<p><font face=宋体 color=#000000 size=2>上个月的最后一天 </font></p>
<p><font face=宋体 color=#000000 size=2>这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住，在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) </font></p>
<p><font face=宋体 color=#000000 size=2>计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(&#8220;23:59:59:997&#8221;)的时间。 </font></p>
<p><font face=宋体 color=#000000 size=2>去年的最后一天 </font></p>
<p><font face=宋体 color=#000000 size=2>连接上面的例子，为了要得到去年的最后一天，你需要在今年的第一天上减去3毫秒。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) </font></p>
<p><font face=宋体 color=#000000 size=2>本月的最后一天 </font></p>
<p><font face=宋体 color=#000000 size=2>现在，为了获得本月的最后一天，我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和&#8220;1900-01-01&#8221;返回的时间间隔上加1。通过加1个月，我计算出下个月的第一天，然后减去3毫秒，这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) </font></p>
<p><font face=宋体 color=#000000 size=2>本年的最后一天 </font></p>
<p><font face=宋体 color=#000000 size=2>你现在应该掌握这个的做法，这是计算本年最后一天脚本 </font></p>
<p><font face=宋体 color=#000000 size=2>SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))</font></p>
<p><font face=宋体 color=#000000 size=2>本月的第一个星期一 </font></p>
<p><font face=宋体 color=#000000 size=2>好了，现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。 </font></p>
<p><font face=宋体 color=#000000 size=2>select DATEADD(wk, DATEDIFF(wk,0,<br>dateadd(dd,6-datepart(day,getdate()),getdate())), 0)</font></p>
<p><font face=宋体 color=#000000 size=2>在这个例子里，我使用了&#8220;本周的星期一&#8221;的<br><br></font></p>
摘自：<a href="http://hi.baidu.com/cenxi/blog/item/221e73092c4486aa2fddd40d.html">http://hi.baidu.com/cenxi/blog/item/221e73092c4486aa2fddd40d.html</a>
<img src ="http://www.cnitblog.com/lenatem/aggbug/56906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-05-04 17:05 <a href="http://www.cnitblog.com/lenatem/archive/2009/05/04/56906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL2005的数据类型详解</title><link>http://www.cnitblog.com/lenatem/archive/2009/04/24/56697.html</link><dc:creator>雅量</dc:creator><author>雅量</author><pubDate>Fri, 24 Apr 2009 08:42:00 GMT</pubDate><guid>http://www.cnitblog.com/lenatem/archive/2009/04/24/56697.html</guid><wfw:comment>http://www.cnitblog.com/lenatem/comments/56697.html</wfw:comment><comments>http://www.cnitblog.com/lenatem/archive/2009/04/24/56697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/lenatem/comments/commentRss/56697.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/lenatem/services/trackbacks/56697.html</trackback:ping><description><![CDATA[<div class="A_con wrap">在计算机中数据有两种<wbr>特征：类型和长度。所<wbr>谓数据类型就是以数据<wbr>的表现方式和存储方式<wbr>来划分的数据的种类。<br>&nbsp;&nbsp;&nbsp; 在SQL Server 中每个变量、参数、表<wbr>达式等都有数据类型。<wbr>系统提供的数据类型分<wbr>为几大类，如表4-2<wbr> 所示。<br><br>&nbsp;&nbsp;&nbsp; 其中，BIGINT、<wbr> SQL_VARIAN<wbr>T 和TABLE 是SQL Server 2000 中新增加的3 种数据类型。下面分类<wbr>讲述各种数据类型。<br><br>一、 整数数据类型<br>&nbsp;&nbsp;&nbsp; 整数数据类型是最常用<wbr>的数据类型之一。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、INT （INTEGER）<br>INT （或INTEGER）<wbr>数据类型存储从-2的<wbr>31次方 （-2 ，147 ，483 ，648） 到2的31次方-1 （2 ，147 ，483，647） 之间的所有正负整数。<wbr>每个INT 类型的数据按4 个字节存储，其中1 位表示整数值的正负号<wbr>，其它31 位表示整数值的长度和<wbr>大小。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、SMALLINT<br>SMALLINT 数据类型存储从-2的<wbr>15次方（ -32， 768） 到2的15次方-1（<wbr> 32 ，767 ）之间的所有正负整数<wbr>。每个SMALLIN<wbr>T 类型的数据占用2 个字节的存储空间，其<wbr>中1 位表示整数值的正负号<wbr>，其它15 位表示整数值的长度和<wbr>大小。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、TINYINT<br>TINYINT数据类<wbr>型存储从0 到255 之间的所有正整数。每<wbr>个TINYINT类型<wbr>的数据占用1 个字节的存储空间。<br>&nbsp;&nbsp;&nbsp;&nbsp; 4、BIGINT<br>BIGINT 数据类型存储从-2^<wbr>63 （-9 ，223， 372， 036， 854， 775， 807） 到2^63-1（ 9， 223， 372， 036 ，854 ，775， 807） 之间的所有正负整数。<wbr>每个BIGINT 类型的数据占用8个字<wbr>节的存储空间。<br><br>二、 浮点数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; 浮点数据类型用于存储<wbr>十进制小数。浮点数值<wbr>的数据在SQL Server 中采用上舍入（Rou<wbr>nd up 或称为只入不舍）方式<wbr>进行存储。所谓上舍入<wbr>是指，当（且仅当）要<wbr>舍入的数是一个非零数<wbr>时，对其保留数字部分<wbr>的最低有效位上的数值<wbr>加1 ，并进行必要的进位。<wbr>若一个数是上舍入数，<wbr>其绝对值不会减少。如<wbr>：对3.141592<wbr>65358979 分别进行2 位和12位舍入，结果<wbr>为3.15 和3.1415926<wbr>53590。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、REAL 数据类型<br>REAL数据类型可精<wbr>确到第7 位小数，其范围为从-<wbr>3.40E -38 到3.40E +38。 每个REAL类型的数<wbr>据占用4 个字节的存储空间。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、FLOAT<br>FLOAT 数据类型可精确到第1<wbr>5 位小数，其范围为从-<wbr>1.79E -308 到1.79E +308。 每个FLOAT 类型的数据占用8 个字节的存储空间。 FLOAT数据类型可<wbr>写为FLOAT[ n ]的形式。n 指定FLOAT 数据的精度。n 为1到15 之间的整数值。当n 取1 到7 时，实际上是定义了一<wbr>个REAL 类型的数据，系统用4<wbr> 个字节存储它；当n 取8 到15 时，系统认为其是FL<wbr>OAT 类型，用8 个字节存储它。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、DECIMAL<br>DECIMAL数据类<wbr>型可以提供小数所需要<wbr>的实际存储空间，但也<wbr>有一定的限制，您可以<wbr>用2 到17 个字节来存储从-10<wbr>的38次方-1 到10的38次方-1<wbr> 之间的数值。可将其写<wbr>为DECIMAL[ p [s] ]的形式，p 和s 确定了精确的比例和数<wbr>位。其中p 表示可供存储的值的总<wbr>位数（不包括小数点）<wbr>，缺省值为18； s 表示小数点后的位数，<wbr>缺省值为0。 例如：decimal<wbr> （15 5），表示共有15 位数，其中整数10 位，小数5。 位表4-3 列出了各精确度所需的<wbr>字节数之间的关系。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 4、NUMERIC<br>NUMERIC数据类<wbr>型与DECIMAL数<wbr>据类型完全相同。<br>注意：SQL Server 为了和前端的开发工具<wbr>配合，其所支持的数据<wbr>精度默认最大为28位<wbr>。但可以通过使用命令<wbr>来执行sqlserv<wbr>er.exe程序以启<wbr>动SQL Server，可改变<wbr>默认精度。命令语法如<wbr>下：SQLSERVR<wbr>[/D master_dev<wbr>ice_path][<wbr>/P precisim_l<wbr>eve1]<br>&nbsp;&nbsp;&nbsp; 例4-4: 用最大数据精度38 启动SQL Server<br>sqlservr /d c:\ Mssql2000\<wbr>data\maste<wbr>r.dat /p38<br>/*在使用了/P 参数后,如果其后没有<wbr>指定具体的精度数值,<wbr>则默认为38 位./*<br><br>三、二进制数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、BINARY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BINARY 数据类型用于存储二进<wbr>制数据。其定义形式为<wbr>BINARY（ n）， n 表示数据的长度，取值<wbr>为1 到8000 。在使用时必须指定B<wbr>INARY 类型数据的大小，至少<wbr>应为1 个字节。BINARY<wbr> 类型数据占用n+4 个字节的存储空间。在<wbr>输入数据时必须在数据<wbr>前加上字符&#8220;0X&#8221; 作为二进制标识，如：<wbr>要输入&#8220;abc &#8221;则应输入&#8220;0xab<wbr>c &#8221;。若输入的数据过长<wbr>将会截掉其超出部分。<wbr>若输入的数据位数为奇<wbr>数，则会在起始符号&#8220;<wbr>0X &#8221;后添加一个0，如上<wbr>述的&#8220;0xabc &#8221;会被系统自动变为&#8220;<wbr>0x0abc&#8221;。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、VARBINAR<wbr>Y<br>VARBINARY 数据类型的定义形式为<wbr>VARBINARY（<wbr>n）。 它与BINARY 类型相似，n 的取值也为1 到8000，若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。不同的是V<wbr>ARBINARY数据<wbr>类型具有变动长度的特<wbr>性，因为VARBIN<wbr>ARY数据类型的存储<wbr>长度 为实际数值长度+4个<wbr>字节。当BINARY<wbr>数据类型允许NULL<wbr> 值时，将被视为VAR<wbr>BINARY数据类型<wbr>。<br>一般情况下，由于BI<wbr>NARY 数据类型长度固定，因<wbr>此它比VARBINA<wbr>RY 类型的处理速度快。<br><br>四、 逻辑数据类型<br>&nbsp;&nbsp;&nbsp; BIT： BIT数据类型占用1<wbr> 个字节的存储空间，其<wbr>值为0 或1 。如果输入0 或1 以外的值，将被视为1<wbr>。 BIT 类型不能定义为NUL<wbr>L 值（所谓NULL 值是指空值或无意义的<wbr>值）。<br><br>五、字符数据类型<br>&nbsp;&nbsp;&nbsp; 字符数据类型是使用最<wbr>多的数据类型。它可以<wbr>用来存储各种字母、数<wbr>字符号、特殊符号。一<wbr>般情况下，使用字符类<wbr>型数据时须在其前后加<wbr>上单引号&#8217;或双引号&#8221;<wbr> 。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1 CHAR<br>CHAR 数据类型的定义形式为<wbr>CHAR[ （n） 。 以CHAR 类型存储的每个字符和<wbr>符号占一个字节的存储<wbr>空间。n 表示所有字符所占的存<wbr>储空间，n 的取值为1 到8000， 即可容纳8000 个ANSI 字符。若不指定n 值，则系统默认值为1<wbr>。若输入数据的字符数<wbr>小于n，则系统自动在<wbr>其后添加空格来填满设<wbr>定好的空间。若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。<br>&nbsp;&nbsp;&nbsp;&nbsp; 2、NCHAR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NCHAR 数据类型的定义形式为<wbr>NCHAR[ （n）]。 它与CHAR 类型相似。不同的是N<wbr>CHAR数据类型n 的取值为1 到4000。 因为NCHAR 类型采用UNICOD<wbr>E 标准字符集（Char<wbr>acterSet）。<wbr> UNICODE 标准规定每个字符占用<wbr>两个字节的存储空间，<wbr>所以它比非UNICO<wbr>DE 标准的数据类型多占用<wbr>一倍的存储空间。使用<wbr>UNICODE 标准的好处是因其使用<wbr>两个字节做存储单位，<wbr>其一个存储单位的容纳<wbr>量就大大增加了，可以<wbr>将全世界的语言文字都<wbr>囊括在内，在一个数据<wbr>列中就可以同时出现中<wbr>文、 英文、法文、德文等，<wbr>而不会出现编码冲突。<br>&nbsp;&nbsp;&nbsp;&nbsp; 3、VARCHAR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR数据类<wbr>型的定义形式为VAR<wbr>CHARn）。 它与CHAR 类型相似，n 的取值也为1 到8000，若输入的<wbr>数据过长，将会截掉其<wbr>超出部分。不同的是，<wbr>VARCHAR数据类<wbr>型具有变动长度的特性<wbr>，因为VARCHAR<wbr>数据类型的存储长度为<wbr>实际 数值长度，若输入数据<wbr>的字符数小于n ，则系统不会在其后添<wbr>加空格来填满设定好的<wbr>空间。<br>一般情况下，由于CH<wbr>AR 数据类型长度固定，因<wbr>此它比VARCHAR<wbr> 类型的处理速度快。<br>&nbsp;&nbsp;&nbsp;&nbsp; 4、NVARCHAR<br>NVARCHAR数据<wbr>类型的定义形式为NV<wbr>ARCHAR[ （n） ]。 它与VARCHAR 类型相似。不同的是，<wbr>NVARCHAR数据<wbr>类型采用UNICOD<wbr>E 标准字符集（Char<wbr>acter Set）， n 的取值为1 到4000。<br><br>六、文本和图形数据类<wbr>型<br>&nbsp;&nbsp;&nbsp; 这类数据类型用于存储<wbr>大量的字符或二进制数<wbr>据。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1、TEXT<br>&nbsp;&nbsp;&nbsp;&nbsp; TEXT数据类型用于<wbr>存储大量文本数据，其<wbr>容量理论上为1 到2的31次方-1 （2， 147， 483， 647）个字节，在实<wbr>际应用时需要视硬盘的<wbr>存储空间而定。<br>SQL Server 2000 以前的版本中，数据库<wbr>中一个TEXT 对象存储的实际上是一<wbr>个指针，它指向一个个<wbr>以8KB （8192 个字节）为单位的数据<wbr>页（Data Page）。 这些数据页是动态增加<wbr>并被逻辑链接起来的。<wbr>在SQL Server 2000 中，则将TEXT 和IMAGE 类型的数据直接存放到<wbr>表的数据行中，而不是<wbr>存放到不同的数据页中<wbr>。 这就减少了用于存储T<wbr>EXT 和IMA- GE 类型的空间，并相应减<wbr>少了磁盘处理这类数据<wbr>的I/O 数量。<br>&nbsp;&nbsp;&nbsp; 2 NTEXT<br>&nbsp;&nbsp;&nbsp; NTEXT数据类型与<wbr>TEXT.类型相似不<wbr>同的,是NTEXT 类型采用UNICOD<wbr>E 标准字符集(Char<wbr>acter Set), 因此其理论容量为23<wbr>0-1(1, 073, 741, 823)个字节。<br>&nbsp;&nbsp;&nbsp; 3 IMAGE<br>&nbsp;&nbsp;&nbsp; IMAGE 数据类型用于存储大量<wbr>的二进制数据Bina<wbr>ry Data。其理论容量<wbr>为2的31次方-1(<wbr>2,147,483,<wbr>647)个字节。其存<wbr>储数据的模式与TEX<wbr>T 数据类型相同。通常用<wbr>来存储图形等OLE Object Linking and Embedding，<wbr>对象连接和嵌入）对象<wbr>。在输入数据时同BI<wbr>NARY数据类型一样<wbr>，必须在数据前加上字<wbr>符&#8220;0X&#8221;作为二进制<wbr>标识<br><br>七、 日期和时间数据类型<br>&nbsp;&nbsp;&nbsp; 1 DATETIME<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATETIME 数据类型用于存储日期<wbr>和时间的结合体。它可<wbr>以存储从公元1753<wbr> 年1 月1 日零时起到公元999<wbr>9 年12 月31 日23 时59 分59 秒之间的所有日期和时<wbr>间，其精确度可达三百<wbr>分之一秒，即3.33<wbr> 毫秒。DATETIM<wbr>E 数据类型所占用的存储<wbr>空间为8 个字节。其中前4 个字节用于存储190<wbr>0 年1 月1 日以前或以后的天数，<wbr>数值分正负，正数表示<wbr>在此日期之后的日期，<wbr>负数表示在此日期之前<wbr>的日期。后4 个字节用于存储从此日<wbr>零时起所指定的时间经<wbr>过的毫秒数。如果在输<wbr>入数据时省略了时间部<wbr>分，则系统将12:0<wbr>0:00:000AM<wbr>作为时间缺省值：如果<wbr>省略 了日期部分，则系统将<wbr>1900 年1 月1 日作为日期缺省值。<br>&nbsp;&nbsp;&nbsp; 2 SMALLDATET<wbr>IME<br>SMALLDATET<wbr>IME 数据类型与DATET<wbr>IME 数据类型相似，但其日<wbr>期时间范围较小，为从<wbr>1900 年1 月1 日到2079 年6 月6：日精度较低，只<wbr>能精确到分钟，其分钟<wbr>个位上为根据秒数四舍<wbr>五入的值,即以30 秒为界四舍五入。如：<wbr>DATETIME 时间为14:38:3<wbr>0.283<br>时SMALLDATE<wbr>TIME 认为是14:39:0<wbr>0 SMALLDATET<wbr>IME 数据类型使用4 个字节存储数据。其中<wbr>前2 个字节存储从基础日期<wbr>1900 年1 月1 日以来的天数，后两个<wbr>字节存储此日零时起所<wbr>指定的时间经过的分钟<wbr>数。<br>&nbsp;&nbsp;&nbsp; 下面介绍日期和时间的<wbr>输入格式<br>&nbsp;&nbsp;&nbsp; 日期输入格式<br>&nbsp;&nbsp;&nbsp; 日期的输入格式很多大<wbr>致可分为三类：<br><br>&nbsp;&nbsp;&nbsp; * 英文+数字格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此类格式中月份可用英<wbr>文全名或缩写，且不区<wbr>分大小写；年和月日之<wbr>间可不用逗号；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 年份可为4 位或2 位；当其为两位时，若<wbr>值小于50 则视为20xx 年，若大于或等于50<wbr> 则<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视为19xx 年；若日部分省略，则<wbr>视为当月的1号。以下<wbr>格式均为正确的日期格<wbr>式：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; June 21 2000 Oct 1 1999 January 2000 2000 February<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2000 May 1 2000 1 Sep 99 June July 00<br>&nbsp;&nbsp;&nbsp; * 数字+分隔符格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许把斜杠（/）、连<wbr>接符（-）和小数点（<wbr>.）作为用数字表示的<wbr>年、月、日之间的分<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 隔符。如：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YMD：2000/6<wbr>/22 2000-6-22 2000.6.22<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MDY：3/5/20<wbr>00 3-5-2000 3.5.2000<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DMY：31/12/<wbr>1999 31-12-1999<wbr> 31.12.2000<br>&nbsp;&nbsp;&nbsp; * 纯数字格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 纯数字格式是以连续的<wbr>4 位6、位或8 位数字来表示日期。如<wbr>果输入的是6 位或8 位<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数字，系统将按年、月<wbr>、日来识别，即YMD<wbr> 格式，并且月和日都是<wbr>用两位数字来表示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果输入的数字是4 位数，系统认为这4 位数代表年份,其月份<wbr>和日缺省为此年度的1<wbr> 月<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 日。如:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20000601--<wbr>-2000 年6 月1 日 991212---1<wbr>999 年12 月12 日 1998---199<wbr>8 年 ???? <br><br>时间输入格式<br>在输入时间时必须按&#8220;<wbr>小时、分钟、秒、毫秒<wbr>&#8221;的顺序来输入。在其<wbr>间用冒号&#8220;：&#8221;隔开。<wbr>但可将毫秒部分用小数<wbr>点&#8220;.&#8221; 分，隔其后第一位数字<wbr>代表十分之一秒，第二<wbr>位数字代表百分之一秒<wbr>，第三位数字代表千分<wbr>之一秒。当使用12 小时制时用AM。am<wbr> 和PM（pm）分别指<wbr>定时间是午前或午后，<wbr>若不指定，系统默认为<wbr>AM。AM 与PM 均不区分大小写。如：<br>&nbsp;&nbsp;&nbsp; 3:5:7.2pm-<wbr>--下午3 时5 分7 秒200 毫秒<br>&nbsp;&nbsp;&nbsp; 10:23:5.12<wbr>3Am---上午10<wbr> 时23 分5 秒123 毫秒<br>&nbsp;&nbsp;&nbsp; 可以使用SET DATEFORMAT<wbr> 命令来设定系统默认的<wbr>日期-时间格式。<br><br>八、货币数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 货币数据类型用于存储<wbr>货币值。在使用货币数<wbr>据类型时，应在数据前<wbr>加上货币符号，系统才<wbr>能辨识其为哪国的货币<wbr>，如果不加货币符号，<wbr>则默认为&#8220;￥&#8221;。各货<wbr>币符号如图4-2所示<wbr>。<br>&nbsp;&nbsp;&nbsp; 1 MONEY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MONEY 数据类型的数据是一个<wbr>有4 位小数的DECIMA<wbr>L 值，其取值从-2的6<wbr>3次方（-922，3<wbr>37，203，685<wbr>，477.5808到<wbr>2的63次方-1（+<wbr>922，337，20<wbr>3，685， 477.5807），<wbr>数据精度为万分之一货<wbr>币单位。MONEY 数据类型使用8个字节<wbr>存储。<br><br>&nbsp;&nbsp;&nbsp; 2 SMALLMONEY<br>SMALLMONEY<wbr>数据类型类似于MON<wbr>EY 类型，但其存储的货币<wbr>值范围比MONEY数<wbr>据类型小,其取值从-<wbr>214,748.36<wbr>48到+214,74<wbr>8.3647,存储空<wbr>间为4 个字节。<br><br>九、 特定数据类型<br>&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 中包含了一些用于数据<wbr>存储的特殊数据类型。<br>&nbsp;&nbsp;&nbsp; 1 TIMESTAMP<br>TIMESTAMP 数据类型提供数据库范<wbr>围内的惟一值此类型相<wbr>当于BINARY8或<wbr>VARBINARY（<wbr>8），但当它所定义的<wbr>列在更新或插入数据行<wbr>时，此列的值会被自动<wbr>更 新，一个计数值将自动<wbr>地添加到此TIMES<wbr>TAMP数据列中。每<wbr>个数据库表中只能有一<wbr>个TIMESTAMP<wbr>数据列。如果建立一个<wbr>名为 &#8220;TIMESTAMP<wbr>&#8221;的列，则该列的类型<wbr>将被自动设为TIME<wbr>STAMP数据类型。<br>&nbsp;2 UNIQUEIDEN<wbr>TIFIER<br>UNIQUEIDEN<wbr>TIFIER 数据类型存储一个16<wbr> 位的二进制数字。此数<wbr>字称为（GUIDGl<wbr>obally Unique Identifier<wbr> ，即全球惟一鉴别号）<wbr>。此数字由SQLSe<wbr>rver 的NEWID函数产生<wbr>的全球惟一的编码，在<wbr>全球各地的计算机经由<wbr>此函数产生的数字不会<wbr>相同。<br><br>十、用户自定义数据类<wbr>型<br>SYSNAME SYSNAME 数据类型是系统提供给<wbr>用户的，便于用户自定<wbr>义数据类型。它被定义<wbr>为NVARCHAR（<wbr>128），即它可存储<wbr>128个UNICOD<wbr>E字符或256个一般<wbr>字符。其具体使用方法<wbr>请参见第7章&#8220;管理数<wbr>据库表&#8221;中的&#8220;自定义<wbr>数据类型&#8221;章节。<br><br>十一、 新数据类型<br>SQL Server 2000 中增加了3 种数据类型：BIGI<wbr>NT、SQL_VAR<wbr>IANT和TABLE<wbr>。其中BIGINT数<wbr>据类型已在整数类型中<wbr>介绍，下面介绍其余两<wbr>种：<br>&nbsp;&nbsp;&nbsp; 1 SQL_VARIAN<wbr>T<br>SQL_VARIAN<wbr>T数据类型可以存储除<wbr>文本、图形数据（TE<wbr>XT、NTEXT、I<wbr>MAGE）和TIME<wbr>STAMP类型数据外<wbr>的其它任何合法的SQ<wbr>L Server数据。此<wbr>数据类型大大方便了S<wbr>QL Server的开发工<wbr>作。<br>&nbsp;&nbsp;&nbsp; 2 TABLE<br>TABLE 数据类型用于存储对表<wbr>或视图处理后的结果集<wbr>。这一新类型使得变量<wbr>可以存储一个表，从而<wbr>使函数或过程返回查询<wbr>结果更加方便快、捷其<wbr>、使用请参见第13章<wbr>&#8220;游标、视图和自定义<wbr>函数&#8221;。&nbsp;</div>
<img src ="http://www.cnitblog.com/lenatem/aggbug/56697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/lenatem/" target="_blank">雅量</a> 2009-04-24 16:42 <a href="http://www.cnitblog.com/lenatem/archive/2009/04/24/56697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>