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)
使用这样的东西来获得你想要的日期.
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)
您可以使用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日".
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |