一、日期类型:
对于SQL Server 2008 来说(因为2000甚至2005已经稍微有被淘汰的迹象,所以在此不作过多说明,加上自己工作使用的是2008R2。所以不保证08以前的能用),日期类型有:
数据类型
格式
范围
精确度
存储大小(以字节为单位)
用户定义的秒的小数精度
时区偏移量
time
hh:mm:ss[.
nnnnnnn]
00:00:00.0000000 到 23:59:59.9999999
100 纳秒
3 到 5
是
否
date
YYYY-MM-DD
0001-01-01 到 9999-12-31
1 天
3
无
无
smalldatetime
YYYY-MM-DD hh:mm:ss
1900-01-01 到 2079-06-06
1 分钟
4
无
无
datetime
YYYY-MM-DD hh:mm:ss[.
nnn]
1753-01-01 到 9999-12-31
0.00333 秒
8
无
否
datetime2
YYYY-MM-DD hh:mm:ss[.
nnnnnnn]
0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999
100 纳秒
6 到 8
有
无
datetimeoffset
YYYY-MM-DD hh:mm:ss[.
nnnnnnn] [+|-]hh:mm
0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999(以 UTC 时间表示)
100 纳秒
8 到 10
有
有
注意:所有系统日期和时间值均得自运行 SQL Server 实例的计算机的操作系统。
每一种日期类型有其使用范围,当然以刚好适用为最佳选择,切记不要为了方便,什么都用datetime类型。从性能方面会有很大影响,举个例子:
一个表,有1亿行的数据,有10列日期型(对于一些历史表来说这是完全有可能的)。如果全部使用datetime,那么光这部分的存储空间就是:10*100000000*8字节/(1024*1024)≈7629M≈7.4G,当然,如果有这样的需要,再大也还是要用的,假设其实业务上不需要那么精确(因为datetime是精确到0.00333秒),只需要精确到1分钟即可,那么毫不犹豫使用smalldatetime,可以减少一半的空间,也就是大约3.7G。减少空间的好处有很多,比如备份及数据库文件的大小可以减少,让有限的预算做更多的事情。而且数据页固定8KB,越少的体积单页能存放的数据也就越多,查询时要访问的页面就更少,缓解I/O压力。同时对索引的使用也更有效,等等。
所以这里就能体现出“设计”的重要性。
二、日期函数:日期函数是处理日期的基础,牢记日期函数能减少很多编程工作
精度较高的系统日期和时间函数
精确程度取决于运行 SQL Server 实例的计算机硬件和 Windows 版本。标注有:2012有效的是只有2012才出现的功能
函数
语法
返回值
返回数据类型
确定性
SYSDATETIME
SYSDATETIME ()
返回包含计算机的日期和时间的 datetime2(7) 值,SQL Server 的实例正在该计算机上运行。
时区偏移量未包含在内。
datetime2(7)
不具有确定性
SYSDATETIMEOFFSET
SYSDATETIMEOFFSET ( )
返回包含计算机的日期和时间的 datetimeoffset(7) 值,SQL Server 的实例正在该计算机上运行。
时区偏移量包含在内。
datetimeoffset(7)
不具有确定性
SYSUTCDATETIME
SYSUTCDATETIME ( )
返回包含计算机的日期和时间的 datetime2(7) 值,SQL Server 的实例正在该计算机上运行。
日期和时间作为 UTC 时间(通用协调时间)返回。
datetime2(7)
不具有确定性
精度较低的系统日期和时间函数
函数
语法
返回值
返回数据类型
确定性
新闻热点
疑难解答