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

时间:2013-05-23 12:18:57

标签: 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

我目前正在使用此声明查找上个月的值,但现在我被告知需要将其更改为第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())))

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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')

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

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

DATEADD / DATEDIFF诀窍是找到两个日期之间的正确关系。所以,例如当增加和减去月份时,2000年12月11日到2001年1月1日的关系是&#34;上个月的第11个&#34;。同样地,2001年1月10日承载了这个月的第10个关系&#34;。

答案 2 :(得分:1)

使用asp经典代码创建两个日期时间变量。制作其中一个,@ StartDate,上个月的第11个月。制作第二个,@ EndDate,本月11日。那是对的,第11次,而不是第10次。然后您的查询将包含:

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

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