在Microsoft SQL Server的类型系统中,使用 date 表示日期类型,使用time表示时间类型,使用DateTime和DateTime2表示日期和时间的组合,DateTime2是DateTime的升级版本,这些数据类型占用的存储空间各不相同;当存储大量数据时,合理的选择小数秒的精度,能够节省数据的占用空间。
当表示国际时间时,存在本地时间和UTC时间之别,同一个时刻,UTC时间是固定的,而本地时间由于时区的差异而不相同。如果一个数据实体的时间字段对时区敏感,那么可以使用DateTimeOffset数据类型,该类型不仅包含本地的日期和时间,还包括本地的时区,用户能够根据本地的时间和时区推算出UTC时间,公式是:UTC时间=本地时间+时区偏移。
小数秒的精度(fractional seconds precision)是指使用多少位小数表示一秒,DateTime2、Time和DataTimeOffset可以控制小数秒的精度,语法是DateTime2(n)、time(n),DataTimeOffset(n),n是小数秒的精度,n的取值范围是0-7,默认值是7,即使用7位小数表示1s,能够表示的最小精确时间(Accuracy)是100ns。DateTime数据类型的最小精确时间是3.33毫秒(0.00333秒),其精确度不高,建议在产品环境中,使用DateTime2(n)来代替DateTime类型。
一,日期和时间类型
DateTime2(n)表示日期和时间,Date只表示日期,Time(n)只表示时间,最后简单介绍DateTime类型。
1,DateTime2数据类型
DateTime2(n)数据类型存储日期和时间,它是DateTime的升级版本,由于小数秒n的精度可以自主设置,其存储大小(Storage Size)不固定,DateTime2(n)占用的存储空间和小数秒的精度之间的关系是:
- DateTime2(n)内部存储的第一个字节存储精度n,后续的字节用于存储值。
- 当小数秒的精度 n < 3 时,存储空间是1B(精度)+ B(数据);
- 当小数秒的精度 n 是 3 - 4 时,存储空间是1B(精度)+ 7B(数据);
- 当小数秒的精度 n 是 5 - 7 时,存储空间是1B(精度)+ 8B(数据),最大的小数秒精度是7,默认值是7;
DateTime2可以表示比DateTime更精确的时间,默认的数据格式是yyyy-MM-dd hh:mm:ss.nnnnnnn,DateTime2 秒默认的精度是7,即用7位小数表示一秒的精度。
datetime2 [ (fractional seconds precision) ]
下面两种声明DateTime2变量的方式是等价的:
declare @dt2 datetime2(7)
declare @dt2 datetime2
为DateTime2类型的变量赋值,需要使用SysDateTime()和SysUTCDateTime(),这两个函数返回值的类型是DateTime2(7)。
declare @dt2 datetime2
set @dt2=SYSDATETIME()
3,Date数据类型
Date数据类型只存储日期,不存储时间,仅需要3B的存储空间,默认的数据格式是yyyy-MM-dd,支持的日期范围从0001-01-01到9999-12-31
可以使用日期字符串,getdate()等函数为Date类型的变量赋值:
declare @d date
set @d='2015-07-02'
set @d=getdate()
set @d=SYSDATETIME()
4,Time类型
Time(n)数据类型只存储时间,不存储日期,需要5B的存储空间。Time(n)小数秒