0

Hi All I'm trying to get the sum the values from a SQL database from the 11th of last month to the 10th of this month ie.

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

I am at currently using this statement to find the values from last month but now i've been told we need to change this to the 11th.

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())))
4

3 回答 3

7

您可以使用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')

但是,如果您的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')

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

DATEADD/DATEDIFF技巧是找到两个日期之间具有正确关系的日期。因此,例如在加减月份时,2000 年 12 月 11 日与 2001 年 1 月 1 日的关系就是“上个月 11 日”。同样地,2001 年 1 月 10 日产生了“本月 10 日”的关系。

于 2013-05-23T12:37:11.943 回答
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]

并像这样在您的查询中使用它们。

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))
于 2013-05-23T12:26:09.237 回答
1

使用您的 asp 经典代码创建两个日期时间变量。制作其中之一,@StartDate,上个月的 11 日。做第二个,@EndDate,这个月的 11 号。没错,是第 11 次,而不是第 10 次。然后您的查询将包含以下内容:

where [date] >= @StartDate
and [date] < @EndDate

这将确保您的日期字段的时间部分被考虑在内。此外,您的查询将运行得更快,因为您没有在 where 子句中使用函数。

于 2013-05-23T12:36:35.770 回答