2011-05-16 95 views

回答

2
declare @date as datetime 

set @date = getdate() 

Select Cast(Floor(Cast(@date as float)) as DateTime) 
+0

非常感谢你。 – Rabin 2011-05-16 10:16:38

0

一个替代方案可以完成同样的任务,具体取决于您在何处使用它。这也可以用在一个完整的脚本不可能的视图中。

SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, GETDATE()))) 
+1

我修改了前一个,使其看起来与你的相似。谢谢。 – Rabin 2011-05-16 10:17:35

2

在2k8之前,我总是;

DATEADD(DAY, DATEDIFF(DAY, 0, datecol), 0) 
+0

哎呀,看起来我错过了这个答案,当我贴我的。你说的是“2k8之前”,但是在性能比较中,我将链接(下面)的日期投射出现为最慢的可用选项(在CPU时间中);你在做一些不同的事情吗?或者它只是不够重要? – Tao 2011-05-18 08:33:01

+0

就我个人而言,我认为在大多数情况下,像这样的转换的性能差异并不重要,在2k8中,您可以将'cast(getdate()as date)' – 2011-05-18 09:05:26

1

由于所有以前的答案都是一样的,我会添加其他“好”的选择,我知道的:

SELECT DateAdd(Day, 0, DateDiff(Day, 0, GetDate())) 

这是由一些/许多人首选,因为它不依赖于DateTime/SmallDateTime中整数表示日期未记录/不受支持的事实。

在SqlServerCentral.com论坛上有关于此主题的有趣讨论,但我无法很快找到链接,对不起。

UPDATE:盖尔肖贴的常用方法一个很好的快速性能对比(这显然是一个最快,但只能通过V少量):http://sqlinthewild.co.za/index.php/2008/09/04/comparing-date-truncations/