Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7068379
  • 博文数量: 702
  • 博客积分: 10821
  • 博客等级: 上将
  • 技术积分: 12031
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-02 10:41
个人简介

中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。

文章分类

全部博文(702)

分类: 数据库开发技术

2010-11-24 10:51:31

SQL Server 2008 终于发布新版了,虽然还只是另一个社区测试版而非完全版。每当新软件发布,大家最关系的问得最多的问题就是:有些什么新特性?SQL Server 2008有很多新功能和新工具。不过,本文还是主要为大家介绍SQL Server 2008七月预览版引入的新数据类型,并对DATETIME数据类型的功能进行专门讨论。

SQL Server 2008中DATETIME功能的最大转变就是引入了四种DATETIME数据类型,分别为DATE、TIME、DATETIMEOFFSET和DATETIME2;此外还增加了新的DATETIME函数功能。

下面首先来讨论一下四种新数据类型的功能和用法。

DATE数据类型

在SQL Server 2005中,没有专门只用来存储日期(不包括时间)的特定数据类型,只能使用DATETIME或SMALLDATETIME数据类型来完成此操作。但是, 当你输入日期之后,会显示还有一个时间的组分需要输入,其初始显示为12:00 AM。如果只想在输出结果中显示日期那一部分,就必须修改输出格式。大部分情况下,可以使用getdate()函数来存储当前日期。要在SQL Server 2005中的SMALLDATETIME或DATETIME列中保存getdate()的函数值,同时也会保存了当前的时间,而这可能会引发很多问题。举 例而言,如果你使用以下的语句,想根据给定的日期来搜索记录:

SELECT FROM tblDate Where [Date] = ‘2007-12-01‘

由于Date列里含有时间组分,这个命令将无法正常执行, 因此,你必须执行以下的查询操作:

SELECT FROM tblDate Where datediff(d,[Date],2007-12-01) =0

尽管上面的查询操作可以行得通,不过Date列中符合要求的索引很可能不会被使用。不过你还是可以使用上面的查询操作调出少量的记录。虽然可以利用工作区,但很明显有必要增加一种去掉时间值的DATE数据类型来减少潜在的错误。来看看以下的语法:

DECLARE@dtasDATE
SET@dt=getdate()
PRINT@dt

以上脚本的输出结果只有日期,不包括时间部分。DATE数据类型的取值范围从0001-01-01到9999-12-31。

TIME数据类型

就像日期数据类型一样,如果你只想存储时间数据而不需要日期部分就可以利用TIME数据类型。下面就是利用TIME数据类型进行查询的例子:

DECLARE@dtasTIME
SET@dt=getdate()
PRINT@dt

以上脚本输出结果只包含时间部分,其取值范围从00:00:00.0000000到23:59:59.9999999。

DATETIME2数据类型

新 的DATETIME2数据类型也是一种数据时间混合的数据类型,不过其时间部分秒数的小数部分可以保留不同位数的值,比原来的DATETIME数据类型取 值范围要广。用户可以根据自己的需要通过设置不同的参数来,设定小数位数,最高可以设到小数点后七位(参数为7),也可以不要小数部分(参数为0),以此 类推。以下是利用DATETIME2的查询语句:

DECLARE@dt7datetime2(7)
SET@dt7=Getdate()
PRINT@dt7

该语句的输出结果中时间的秒数部分精确到小数点后第七位,取值范围 0001-01-01 00:00:00.0000000到9999-12-31 23:59:59.9999999

DATETIMEOFFSET数据类型

Datetimeoffset类型存储的精度以及准确度都和Datetime2一样,但还提供了设置时区偏移量的功能,可以用来跟踪跨时区日期和时间的转换。

阅读(3008) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-24 14:25:30

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com