通过存储过程检查DB中的DateTime是否超过90天

时间:2009-09-28 13:59:42

标签: sql sql-server sql-server-2005 tsql datetime

更新

显然我没有包含足够的数据,抱歉!

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


您好,

我有一个存储DATETIME的列(campaign_Date)。使用存储过程我需要检查存储的日期是否为90天(或更长)。

任何帮助都会很棒。

感谢。

5 个答案:

答案 0 :(得分:11)

这将返回所有旧广告系列:

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 :(得分:6)

参见DateAdd函数

http://msdn.microsoft.com/en-us/library/ms186819.aspx

SELECT *
FROM MyTable
WHERE Campaign_Date <= DateAdd (d, -90, GetDate())

答案 2 :(得分:3)

这是以前答案的变体,包含在存储过程中(似乎有人问):

CREATE PROC sp_Campaign_Archive AS

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

GO

答案 3 :(得分: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

答案 4 :(得分: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

由于此状态因日期而异,因此会快速过时,您可以将其设为计算列。