2010-05-21 90 views

回答

6

最好的方法是:

SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0) 

這是因爲在內部,SQL Server將所有日期存儲爲兩個整數,其中第一個日期是***自1900年1月1日起的***天數。(第二個是時間部分,存儲作爲自午夜以來的秒數。 (SmallDateTime s的秒數或DateTime s的毫秒數)
使用上述表達式更好,因爲它避免了所有轉換,直接讀取並訪問日期內部表示中的第一個整數,而無需執行任何處理......兩個零在上面的表達式(代表1900年1月1日)中,也是直接利用W/O處理或轉換,因爲它們與日期1月1900的SQL服務器內部表示完全匹配(作爲整數)。

*注意。實際上,你必須跨越日期邊界(midnights)的數量才能從一個日期到另一個日期。

+0

在查看回復之前,我已經想清楚了,但這是我走過的路,而且完美無缺。 – 2010-05-25 12:59:45

1

可以使用的功能:

  1. day(date)
  2. month(date)
  3. year(date)
+0

是否還有類似的時間部分功能?像小時(日期),分鐘(日期)。謝謝 – curiousBoy 2013-11-25 23:30:25

5

,通過使用convert函數。例如:

select getdate(), convert(varchar(10),getdate(),120) 

結果:

----------------------- ---------- 
2010-05-21 13:43:23.117 2010-05-21 
0
DECLARE @dToday DATETIME 
SET @dToday = CONVERT(nvarchar(20), GETDATE(), 101) 
SELECT @dToday AS Today 

這個上午12:00返回今天的日期: '2010-05-21 00:00:00.000' 然後你可以使用根據需要查詢@dToday變量