2011-03-29 71 views
2

我試圖獲取僅在查詢運行當天的05:00:00之前在系統中存在的記錄列表。我有這個查詢在基本測試中工作,但我想看看是否有比執行SQL連接更好的選項。SQL Server在定義的時間之前獲取記錄

select * 
    from Payment 
where createTimestamp <= CONVERT(VARCHAR(10), Getdate(), 120) +' '+'17:00:00'; 

這個查詢的SQL Server上使用2008年

+0

當天下午5點之前......你是否也只希望自前一天下午5點開始錄音? – 2011-03-29 19:21:36

+0

「僅在當天下午5點之前查詢運行」是指「在給定日期的下午5點之前的任何日期」(包括前幾天的項目)還是意味着「在當天但下午5點之前」? – Thomas 2011-03-29 19:32:53

+0

@ Neil:這是針對每個星期三運行的計劃任務。所以我們只需要支付「待付款」狀態下的所有付款。所以沒有要求查看前一天的時間。我必須尋找「待付」狀態。 @Thomas:前者。 – 2011-03-29 19:49:52

回答

4
Select ... 
From Payment 
Where CreateTimeStamp <= DateAdd(hh, 17, DateDiff(d, 0, CURRENT_TIMESTAMP)) 

另一種選擇給您使用的是SQL Server 2008中

Select ... 
From Payment 
Where CreateTimeStamp <= DateAdd(hh, 17, Cast(Cast(CURRENT_TIMESTAMP As Date) As DateTime)) 
+0

我嘗試了2008年的選擇,它的工作。謝謝。 – 2011-03-29 19:52:14

0

這將檢索與之間的createTimestamp所有記錄上午12點和下午5點。

select * 
    from Payment 
where createTimestamp 
     between dateadd(dd, datediff(dd, 0, getdate()), 0) 
      and dateadd(hh, 17, dateadd(dd, datediff(dd, 0, getdate()), 0)) 

這將檢索今天昨天下午5點下午5點之間的createTimestamp的所有記錄。

select * 
    from Payment 
where createTimestamp 
     between dateadd(hh, -7, dateadd(dd, datediff(dd, 0, getdate()), 0)) 
      and dateadd(hh, 17, dateadd(dd, datediff(dd, 0, getdate()), 0)) 

爲了更有趣的SQL日期檢查我的回答GETDATE last month