SQL计算整整几个月

时间:2014-02-06 16:44:42

标签: sql

我目前有一个sql存储过程,可在6个月后自动关闭打开的票证。类似于以下内容

UPDATE TABLE.TICKETS
SET STATUS = 'Closed'
WHERE DateAdd(MM,6,OPENED_DATE) < GETDATE()

只要opens_date恰好是6个月或更长时间,就会将状态设置为关闭状态。

我需要它做的是计算整个月。例如

如果开放日期是05/05/2010,我不希望它在2010年11月5日关闭(目前正好6个月 - 我现在希望它在月末关闭距离酒店有6个月的时间。即05/05/2010的机票将于2010年12月1日截止。2010年5月15日提交的机票也将于2010年12月1日截止。

有人可以建议最好的方法吗?我的想法是空白:(。谢谢

2 个答案:

答案 0 :(得分:2)

这个怎么样:

UPDATE TABLE.TICKETS
SET STATUS = 'Closed'
WHERE OPENED_DATE < dateadd(mm, -6, GETDATE() - day(getdate) + 1)

day()函数返回月中的某一天,因此表达式GETDATE() - day(getdate) + 1将返回当月的第一天。其余的减去六个月并将其与OPENED_DATE进行比较。

请注意,我将逻辑从列切换到“常量”。这允许SQL Server在OPENED_DATE上使用索引(如果有的话)(技术术语是“sargability”)。

答案 1 :(得分:0)

检查今天OPEN_DATE月份的最后一天:

UPDATE TABLE.TICKETS
SET STATUS = 'Closed'
WHERE DateAdd(MM,6,DATEDIFF(m,0,OPENED_DATE)+1,0))) < GETDATE()