2015-02-05 79 views
0

我運行下面的查詢來檢查前一天是否運行。下面的查詢工作,但我必須每天更改日期以獲得我想要的結果。我已經嘗試了多種東西,我發現它們看起來像他們應該返回結果,但他們似乎不工作。昨天在Microsoft SQL Server Management Studio中的動態語句

select * from Linking_Results 
where Evaluated between '2015-02-04 00:00:01.001' and '2015-02-04 23:59:00.999' 
and Linked = '1' order by Evaluated 

所以我的問題是,我如何做一個昨天的動態聲明,並保持不必每天更改日期?

+0

MySQL或SQL Server 2008?他們是非常不同的產品。 @paul你確定要從標題中刪除SQL Server 2008嗎? – Taryn 2015-02-05 16:20:23

+0

@bluefeet因爲標籤和upvoted的答案,我去了MySQL。原標題是'My SQL Server 2008',令人困惑。 – paul 2015-02-05 16:25:52

+0

@paul不幸的是,標籤和標題通常都是錯誤的。很多人都提到'mysql服務器',並指**我的**'sql服務器'。 – Taryn 2015-02-05 16:27:08

回答

1

您可以使用dateaddgetdate函數。

declare @start datetime, 
     @end datetime 

-- subtract one day and cast it as a date to drop the time portion 
select @start = cast(dateadd(day, -1, getdate()) as date) 
-- add one day and subtract 3ms to get the end of yesterday (apparently SQL rounds) 
select @end = dateadd(ms, -3, dateadd(day, 1, @start)) 

值將被

2015-02-04 00:00:00.000 
2015-02-04 23:59:59.997 

,你可以在這兩個變量之間做了。由於您使用的是between,因此您需要考慮時間部分。您可以更改where子句去第二天,並在@end上進行獨家檢查

select @end = dateadd(day, 1, @start) 

where Evaluated >= @start and Evaluated < @end 
+0

我在運行時收到以下內容: Msg 156,Level 15,State 1,Line 2 關鍵字'current_date'附近的語法錯誤。 – Gareth 2015-02-05 19:51:20

+0

@Gareth,答案是MySQL。顯然,MSSQL有點複雜。我用一個例子更新了它。 – Brandon 2015-02-05 20:24:36

相關問題