大家好我正试图从上个月的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())))
答案 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子句中使用函数。