【问题标题】:SQL Server 2 ways to get month totals but different resultsSQL Server 2 获取月份总计但结果不同的方法
【发布时间】:2015-02-06 14:41:17
【问题描述】:

我正在尝试获取过去一个月的总月数,并尝试了两种不同的方法,但虽然我应该得到相同的结果,但通常情况不同。 这是我尝试过的两种方法:

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

【问题讨论】:

  • 输入数据和预期结果?

标签: sql-server date


【解决方案1】:

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

比较您的查询:

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)

【讨论】:

  • 是的,你是对的!我根本没有考虑时间。铸造为日期给了我同样的结果!谢谢! m(_ _)m
  • 在您的解决方案之后,我还找到了另一个。使用 CONVERT(VARCHAR,,###) 也应该可以消除时间因素。
猜你喜欢
  • 2015-04-10
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多