我正在使用SQL Server 2008.我有一個表,它有一個名爲CreateTime的日期時間類型列。我需要從該表中選擇所有記錄的CreateTime超過3天,從當前時間(UTC時間)起半小時。我正在使用T-SQL存儲過程。SQL Server中的DateDiff尋求幫助
順便說一句:CreateTime列是過去一段時間。
我花了相當多的時間學習和搜索DateDiff的MSDN幫助,但無法弄清楚。任何人都可以給我看一個樣品嗎?
由於事先 喬治
我正在使用SQL Server 2008.我有一個表,它有一個名爲CreateTime的日期時間類型列。我需要從該表中選擇所有記錄的CreateTime超過3天,從當前時間(UTC時間)起半小時。我正在使用T-SQL存儲過程。SQL Server中的DateDiff尋求幫助
順便說一句:CreateTime列是過去一段時間。
我花了相當多的時間學習和搜索DateDiff的MSDN幫助,但無法弄清楚。任何人都可以給我看一個樣品嗎?
由於事先 喬治
您可以選擇和使用分鐘,並DATEDIFF添加一個WHERE子句:
SELECT (fields)
FROM (table)
WHERE
DATEDIFF(MINUTE, CREATETIME, getutcdate()) <= (3*24*60 + 30)
當然,如果你只想要那些行更多超過3天,30分鐘的路程,只需使用相反:
WHERE
DATEDIFF(MINUTE, CREATETIME, getutcdate()) > (3*24*60 + 30)
樣品:
SELECT
DATEDIFF(MINUTE, '2009-08-01 08:00:00', getutcdate()),
DATEDIFF(MINUTE, '2009-07-31 20:00:00', getutcdate()),
DATEDIFF(MINUTE, '2009-07-23 20:00:00', getutcdate())
給出作爲結果:
96 816 12337
所以前兩個日期仍然在4350分鐘的括號內(小於3天和30分鐘前),而第三次日期更遠。
馬克
一個小問題給定答案,雖然他們是正確的。不要將函數應用於列:將函數應用於比較值。
如果CREATETIME被索引,那麼它是掃描而不是使用列上的函數進行查找。 您不需要數百萬行來解決這個問題。
適應marc_s的答案:
SELECT (fields)
FROM (table)
WHERE
CREATETIME <= DATEADD(MINUTE, - (3*24*60 + 30), getutcdate())
這個問題實際上是規定了3天,一個半小時,而不是1天。 – Amber 2009-08-01 09:19:37
被抓住了。更新。 – 2009-08-01 09:21:40