我有包含一个datetime列的表。我只需要返回过去6个月的行。这可以通过
WHERE CloseTime >= DATEADD(Month, DATEDIFF(Month, 0, DATEADD(m, - 6, CURRENT_TIMESTAMP)), 0)
这将获取我开始执行该脚本的月份的数据+上个月的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;
您也可以使用0
代替,'19000101'
但我更喜欢使用显式日期而不是隐式速记(这是一个很难打破的习惯)。
如果您真的不喜欢变量,则可以通过重复该表达式来计算本月的第一天(并在范围的开始,从月份数中减去7),使查询变得更加复杂。
SELECT...
WHERE CloseTime >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE())-7, '19000101')
AND CloseTime < DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
呸。变量使整整齐齐。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句