我有一个报告,我应该每月运行一次,并选择从去年同月21日到今年当月20日的数据。 即现在是 8 月 29 日,今天我需要运行我的报告,但我希望它仅显示 2016 年 8 月 21 日至 2017 年 20 月 8 日的数据,当我在 9 月运行它时,我想要 2016 年 20 月 9 日至 2017 年 9 月 21 日的数据。 .
我正在使用
Select *
from invt
where DATE > (GETDATE()-365)
但这只是近似值,我必须在每月 20 日准确运行报告。
知道该怎么做吗? TIA
最佳答案
应该与:
SELECT *
FROM invt
WHERE DATE BETWEEN
DATEADD(YEAR,-1,DATEADD(DAY,19,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)))
AND DATEADD(DAY,20, DATEADD(MONTH,DATEDIFF(MONTH,0, GETDATE()),0))
看起来很吓人,但它基本上做的是简单的事情:
去年 20 日:
- 获取当前日期
- 只取月份(月初)
- 添加 19 天(现在是本月 20 日)
- 减去一年
本月 21 日的逻辑几乎相同。只是不减去一年。
关于sql - 选择特定日期 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947648/