你可能想GETDATE从现在开始计算九个月边界:
where t.date >= dateadd(m,-9, GETDATE())
请注意,如果t.date是日期和时间字段不只是约会,你会看到奇怪的行为在九个月的边界上,除非你也在比较之前舍弃了时间。
或者,如果你比较它与另一个值如插入的记录在你的触发器中的日期,那么你得到的可能是好的,例如,像
declare @latest date
select @latest = inserted.date
delete from ... where t.date < dateadd(m, -9, @latest)
虽然我建议你居然归档关数据,而不是将其删除。
既然你已经明确你想要整整两个月,即从上月底9个月,你可以使用
declare @today date;
declare @firstOfMonth date;
declare @nineMonthsAgo date;
set @today = GETDATE();
set @firstOfMonth = DATEADD(d, 1-DAY(@today), @today);
set @nineMonthsAgo = DATEADD(m, -9, @firstOfMonth);
... WHERE date >= @nineMonthsAgo AND date < @firstOfMonth
来源
2011-06-14 15:41:47
Rup
通常,使用代码标签格式化代码并包含表结构的想法是一个好主意。 – JNK 2011-06-14 15:41:40
我知道它容易让你们也为更好地理解.. – Shahsra 2011-06-14 15:44:53
小的修改我的问题,如果我们有一个日期,然后回答以下问题,将工作。但是如果我们有[Fiscal_Month]而不是[Date],那么呢? [Fiscal_Month]的例子就像这个'2012M03','2011M05'等,然后dateadd(m,-9,date)语法不会在那里工作..我们还能做什么? – Shahsra 2011-06-14 18:17:23