数据库的SQL值在上个月的11月到本月的10号之间

Ric*_*Kap 0 sql sql-server asp-classic

大家好我正试图从上个月的11日到本月10日从SQL数据库中获取值.

SELECT SUM(pay) AS month_pay 
FROM payaccounts 
WHERE dates BETWEEN 11th of last month and the 10th of this month
Run Code Online (Sandbox Code Playgroud)

我目前正在使用此声明来查找上个月的值,但现在我被告知我们需要将其更改为第11个.

SELECT SUM(pay) AS month_pay 
FROM payaccounts 
WHERE (DATEPART(m, date) = DATEPART(m, DATEADD(m, - 1, GETDATE()))) AND 
      (DATEPART(yy, date) = DATEPART(yy, DATEADD(m, - 1, GETDATE())))
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 7

使用这样的东西来获得你想要的日期.

select dateadd(day, 10, dateadd(month, datediff(month, 0, getdate()) - 1, 0)) [11 of last],
       dateadd(day, 10, dateadd(month, datediff(month, 0, getdate()), 0)) [11 of current]
Run Code Online (Sandbox Code Playgroud)

并在您的查询中使用它们.

SELECT SUM(pay) AS month_pay 
FROM payaccounts 
WHERE date >= dateadd(day, 10, dateadd(month, datediff(month, 0, getdate()) - 1, 0)) and
      date < dateadd(day, 10, dateadd(month, datediff(month, 0, getdate()), 0))
Run Code Online (Sandbox Code Playgroud)


Dam*_*ver 6

您可以使用DATEADD/ DATEDIFF(两次)来计算这些日期:

SELECT SUM(pay) AS month_pay 
FROM payaccounts 
WHERE dates BETWEEN
    DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001211') and
    DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010110')
Run Code Online (Sandbox Code Playgroud)

但是,如果您的dates列也包含时间,我建议:

SELECT SUM(pay) AS month_pay 
FROM payaccounts 
WHERE dates >= DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001211') and
      dates < DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010111')
Run Code Online (Sandbox Code Playgroud)

(我们现在使用>=和指定半开区间<)

DATEADD/ DATEDIFF诀窍就是找到两个日期与他们之间的正确关系.因此,例如在增加和减去月份时,2000年12月11日到2001年1月1日的关系是"上个月的11号".同样,2001年1月10日的关系也是"本月10日".