2011-05-16 177 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/

相關問題