2015-02-06 53 views
0

我想獲取過去一個月的月總計,並嘗試了兩種不同的方法,但儘管我應該得到相同的結果,但通常情況卻不同。 這是兩種方法我試過:SQL Server 2個獲取月份總計但獲得不同結果的方法

  1. 使用MONTH()和YEAR()與DATEADD():

    WHERE YEAR(SomeDate) = YEAR(DATEADD(mm,-6,GETDATE())) AND MONTH(SomeDate) = MONTH(DATEADD(mm,-6,GETDATE())) 
    
  2. 使用DATEADD()來確定每個月的第一天和最後一天:

    WHERE SomeDate >= DATEADD(mm, -6, DATEADD(D,(DATEPART(D, GETDATE())-1)*-1,GETDATE())) AND SomeDate <= DATEADD(mm, -5, DATEADD(D,DATEPART(D, GETDATE())*-1,GETDATE())) 
    

我預計這兩種方法給我的所有結果2014年8月(現爲2015年2月),b第二種方法有時會留下一定的結果。我認爲這確實沒有意義。任何人都可以澄清這一點?

+1

輸入數據和預期的結果? – 2015-02-06 14:42:37

回答

0

您需要處理在上述日期時間:

比較查詢:

SELECT DATEADD(mm, -6, DATEADD(D,(DATEPART(D, GETDATE())-1)-1,GETDATE())) 

要:

SELECT CAST(DATEADD(mm, -6, DATEADD(D,(DATEPART(D, GETDATE())-1)-1,GETDATE())) AS DATE) 
+0

是的,你是對的!我根本沒有考慮時間。作爲日期鑄造給我兩個相同的結果!謝謝! m(_ _)m – Maarten 2015-02-11 14:03:57

+0

解決方案後,我也發現了另一個。使用CONVERT(VARCHAR,,###)也應該消除時間因素。 – Maarten 2015-02-11 14:07:45