SQL 服务器 2 种获取月总数但结果不同的方法

SQL Server 2 ways to get month totals but different results

我正在尝试获取过去一个月的月份总计并尝试了两种不同的方法,但尽管我应该得到相同的结果,但结果往往不同。 这是我尝试过的两种方法:

  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 月)的所有结果,但第二种方法有时会遗漏某些结果。我认为这真的没有意义。谁能澄清一下?

您需要处理这些日期的时间:

比较您的查询:

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)