在SQL Server中,对日期以及时间函数的处理意义非同小可。而且,并不像大家所想就是getdate()那般简单。而且需要面临多种日期处理的情况。接下来,我想简单讨论一下常见的处理情况,以及我们在使用SQL Server中可能常常会让人束手无策的、令人头痛不已的情况。
我们先谈谈日期和时间的数据类型。在SQL Server2008之前,SQL Server只有两种数据类型:DATETIME 和 SMALLDATETIME。但是就是这两个数据类型往往满足不了我们的需求,因为它们同时包含了日期和时间部分,而且是不能分开的。而我们经常面对的情况是,我们只需要日期部分,或者只要时间部分,甚至只要YEAR 、MONTH 、DAY的整数部分。
例如,我们要整理每天的订单的总价值。那么,我们在设计数据库的时候,对订单日期这个属性我们首先想到的就是用GETDATE()【或者用CURRENT_TIMESTAMP或者SYSDATETIME(),三者返回结果一样,但前两者数据类型为datetime,后者为datetime(7)】。然后,在统计订单时,用聚集函数SUM(),GROUP BY dOrderDate(订单日期。),这里就有一个问题,这GROUP BY的结果是什么?没错,就是时间,这样变成了按时间来统计你的订单价值,与我们所需背道而驰。我们可以考虑样式转换:
SELECT CONVERT(varchar(50),GETDATE(),120)
关于样式号的内容可以参阅SQL Server 2008联机丛书中的:CAST 和 CONVERT.
需要注意的一点是:CAST 是ANSI标准 SQL,而 CONVERT不是。因此,除非你要使用样式参数,否则请优先考虑CAST函数。庆幸的是,在SQL Server 2008中,微软给我们提供了新的数据类型:DATE。当你定义的数据类型为DATE时,就会以YYYY/MMMM/DDDD格式给你返回日期。下面是 SQL Server 2008日期时间数据类型表,引用自联机丛书。
转载于:https://blog.51cto.com/bluejay/885886