严格来说,方法a
是最少的资源消耗:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
事实证明,同一时间总计一百万行的CPU占用较少,占用的时间太多了:SQL Server中从date + time获取日期的最有效方法?
我在其他地方也看到了类似的测试,结果也差不多。
我更喜欢DATEADD / DATEDIFF,因为:
编辑,2011年10月
对于SQL Server 2008+,您可以CAST到date
ie CAST(getdate() AS date)
。或者只是使用date
数据类型,所以没有时间删除。
编辑,2012年1月
一个这样灵活的工作示例:需要在sql server中按四舍五入的时间或日期来计算
编辑,2012年5月
不要在WHERE子句等中使用它,而无需考虑:向列中添加函数或CAST会使索引使用无效。请在此处查看编号2:http://www.simple-talk.com/sql/t-sql-programming/ten-common-sql-programming-mistakes/
现在,这确实有一个示例,该示例说明了可以正确管理CAST的最新SQL Server优化程序版本,但通常这是一个坏主意...
编辑日期为2018年9月
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)