我有一个包含一个日期时间列的表.我只需要过去6个月才能返回行.这可以通过
WHERE CloseTime >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m, - 6, CURRENT_TIMESTAMP)), 0)
Run Code Online (Sandbox Code Playgroud)
这让我得到了我上个月开始这个剧本+ 6个月的数据.因此,例如,如果我今天运行此脚本,我将获取本月+所有前几个月的数据,直到4月(04).
现在我需要修改条件,所以如果我今天运行脚本,数据将只在03-09个月获得,不包括本月的天数(10).
请问有什么建议吗?
如果你想拥有前6个月,无论今天是第1,第3,第9,第29,无论如何,那么只需减去7个月.这是一种方法:将月中的第一个变为变量,然后在查询中使用开放式范围.
DECLARE @ThisMonth DATETIME;
SET @ThisMonth = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
SELECT...
WHERE CloseTime >= DATEADD(MONTH, -7, @ThisMonth)
AND CloseTime < @ThisMonth;
Run Code Online (Sandbox Code Playgroud)
你也可以0代替使用,'19000101'但我更喜欢明确的约会而不是隐含的速记(这是一个非常难以打破的习惯).
如果你真的不喜欢变量,那么你可以通过重复表达来计算本月的第一个(并且在范围的开头,从月数中减去7)来使查询更加复杂:
SELECT...
WHERE CloseTime >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE())-7, '19000101')
AND CloseTime < DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
Run Code Online (Sandbox Code Playgroud)
呸.变量使这更加整洁.