2017-05-25 73 views
-1

我正在嘗試獲取上個整月的數據,但最後一天的數據沒有獲取。獲取上個月的最後一個日期Transact-SQL

輸出:上個月是4月份,這個條件只能檢索到4月29日的數據。 4月30日的數據丟失。

可以請別人幫我解決這個問題。

OLH.DateStamp > CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0),101) 
And 
OLH.DateStamp < CONVERT(VARCHAR,DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1),101)) 

在此先感謝

+0

如果你的價值觀包括*時*,它通常是更好地計算一個*獨家*端點(即當前的第一個月),並在比較中使用「<」而不是「<=」。 –

+0

[SQL Query查找月份的最後一天]的可能重複(https://stackoverflow.com/questions/16646585/sql-query-to-find-the-last-day-of-the-month) –

回答

1

獲取數據前一個月最簡單的方法是:

DATEDIFF(month, OLH.DateStamp, GETDATE()) = 1 

然而,不使用索引。所以,更好的方法是:

OLH.DateStamp >= DATEADD(MONTH, -1, DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE))) AND 
OLH.DateStamp < DATEADD(DAY, 1 - DAY(GETDATE()), CAST(GETDATE() as DATE)) 

表達:

DATEADD(DAY, 1 - DAY(GETDATE), CAST(GETDATE() as DATE)) 

在當月的第一天的回報午夜。

+0

謝謝非常@Gordon Linoff。讓我試試看。 – wahab

1

你應該嘗試每月的最後一天應該是<= OLH.Datestamp

,從而獲得所需的輸出,你正在尋找:

--Use It In Where Clause 
DECLARE @FirstDayOfLastMonth 
     DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(DATEADD(m, -1, GETDATE() - 
     2))), DATEADD(m, -1, GETDATE() - 1))) 
,@LastDayOfLastMonth DATETIME = CONVERT(DATE, DATEADD(d, -(DAY(GETDATE())), GETDATE())) 

OLH.DateStamp >= CONVERT(VARCHAR, @FirstDayOfLastMonth , 101) AND 
OLH.DateStamp <= CONVERT(VARCHAR, @LastDayOfLastMonth , 101) 
+0

嘗試了上述解決方案,但我仍然無法獲得3月30日的記錄。 – wahab

相關問題