2010-06-08 66 views
9

我有一個smalldatetime字段,該記錄創建時記錄爲myTime。我需要選擇在最近一小時內創建的記錄的語法。查找在過去一小時內生成的記錄

認爲這將是:

and DATEDIFF("hh", datePart(hh, myTime), DatePart(hh, GETDATE()) < 1 

其中datediff

  1. 查找小時
  2. 着眼於數值指明MyTime的數據的時間部分作爲起始
  3. 着眼於小時部現在結束
  4. 產生一個int值,與' 1'

我得到的結果是明顯的方式,但我不知道爲什麼。

附錄:由於這兩個答案基本上都是一致的,所以這並不爲我返回任何東西必須跟蹤我的表是如何創建的。它由LogParser針對IIS日誌工作而創建,並具有跨2個不同字段的日期/時間信息。 Date僅保存今日記錄全部看起來像的日期信息:2010-06-08 00:00:00.000和時間字段看起來像:2010-01-01 15:02:51.000(所有記錄的日期部分是01年1月1日)。

回答

25

使用此:

SELECT * 
FROM Whatever 
WHERE myTime > DATEADD(HOUR, -1, GETDATE()) 
+1

0123秒前,我和使用代碼塊啓動!+1 – 2010-06-08 16:49:32

2

使用SELECT * FROM YourTable WHERE YourDateTime> = DATEADD(HH,-1,GETDATE())

2

如果你想整個小時使用下面...

--This Hour 
SELECT * 
FROM Whatever 
WHERE myTime >= dateadd(hour, datediff(hour, 0, GETDATE()), 0) 

--Last Hour 
SELECT * 
FROM Whatever 
WHERE myTime < dateadd(hour, datediff(hour, 0, GETDATE()), 0) AND myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -1, GETDATE())), 0) 

--Hour before last 
SELECT * 
FROM Whatever 
WHERE myTime < dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -1, GETDATE())), 0) AND myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -2, GETDATE())), 0) 
0

雖然這WHERE myTime > DATEADD(HOUR, -1, GETDATE())應該爲我工作,由於一些奇怪的原因,在我的SQL Server日期時間費爾德以一種奇怪的方式配置,其中上面的代碼將返回了整整一天,不強制t在Now之前的小時。一些故障排除後,我發現,GETDATE()實際上是超前於當前的時間爲7小時,使我的查詢看起來是這樣的:

WHERE myTime BETWEEN DATEADD(HH, 6, GETDATE()) AND DATEADD(HH, 7, GETDATE()) 

所以DATEADD(HH,7,GETDATE()現在加上7個小時(其中來自根據數據庫出來的時間是當前時間),然後減去一小時,以獲得該小時內的所有行,我想我應該發佈這個只是爲了幫助任何人有同樣的問題

+0

您可能更喜歡查看哪臺服務器存儲日期並將其時區設置與數據庫服務器進行比較。您的代碼很脆弱,因爲它取決於爲不同時區設置的服務器比o療法。 – NotMe 2017-09-27 17:02:10

相關問題