2009-09-28 8 views
7

अद्यतन के माध्यम से अधिक से अधिक 90 दिन पुराना हैजांच करें कि डीबी में datetime संग्रहित प्रक्रिया

जाहिर है मैं पर्याप्त डेटा शामिल नहीं किया था, खेद है!

मुझे 'campaign_Status' = 6 सेट करना है जब 'campaign_Date' 90 दिनों से अधिक पुराना है।


हाय,

मैं एक स्तंभ (campaign_Date) जो एक DATETIME संग्रहीत करता है। संग्रहीत प्रक्रिया का उपयोग करने के लिए मुझे यह जांचने की आवश्यकता है कि संग्रहीत दिनांक 90 दिन पुराना है (या अधिक)।

कोई भी मदद महान होगी।

धन्यवाद।

+0

तुम्हारा मतलब आप तालिका जहां Campaign_Date 90 दिन से अधिक है से सभी पंक्तियों को वापस करना चाहते हैं पुराना? –

उत्तर

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

3

यहाँ पिछले उत्तरों के एक बदलाव है, एक संग्रहीत प्रक्रिया में लिपटे है (जैसा कि कहा जा लग रहा था):

CREATE PROC sp_Campaign_Archive AS 

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

GO 
संबंधित मुद्दे