2009-09-28 129 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