2009-09-28 54 views
7

UPDATE超过90天检查日期时间在DB是通过存储过程

显然我并没有包括足够的数据,对不起!

当'campaign_Date'超过90天时,我需要做的是设置'campaign_Status'= 6。


您好,

我有其存储DATETIME柱(campaign_Date)。使用存储过程我需要检查存储日期是否为90天(或更多)。

任何帮助将是伟大的。

谢谢。

+0

你的意思是你想从那里Campaign_Date是超过90天返回表中的所有行旧? – 2009-09-28 14:03:25

回答

10

这将返回所有旧的活动:

SELECT * 
FROM mytable 
WHERE campaign_Date <= DATEADD(day, -90, GETDATE()) 

这将选择1如果活动是旧的,0否则:

SELECT CASE WHEN campaign_Date <= DATEADD(day, -90, GETDATE()) THEN 1 ELSE 0 END 
FROM mytable 

请注意,第一个查询条件是sargable:它将允许使用索引来过滤日期。

这将更新所有旧的活动状态为6

UPDATE mytable 
SET  campaign_status = 6 
WHERE campaign_Date <= DATEADD(day, -90, GETDATE()) 
1
SELECT IIF(DATEDIFF(d, campaign_date, getdate()) >= 90, true, false) 
AS IsNinetyOrMoreDaysOld 
FROM myTable 

编辑:如果你想选择哪个是90天或更长时间的旧记录,

SELECT campaign_date 
FROM myTable 
WHERE DATEDIFF(d, campaign_date, getdate()) >= 90 
1
select campaign_Date, 
    case when getdate() - campaign_Date >= 90 then 'yes' else 'no' end as Is90DaysOldOrMore 
from MyTable 

更新:

您可以更新这样的记录:

update MyTable 
set campaign_Status = 6 
where getdate() - campaign_Date >= 90 

由于这种状态会过时很快,因为它是迄今为止相关的,你可以把一个计算列来代替。

+0

@Munklefish:看到我的更新 – RedFilter 2009-09-28 15:44:59

3

下面是对以前的答案的变化,包裹在一个存储过程(如似乎在问):

CREATE PROC sp_Campaign_Archive AS 

    UPDATE [Campaign Table] 
    SET Campaign_Status = 6 
    WHERE DateDiff(day,Campaign_Date,GetDate()) >= 90 

GO