更新
显然我没有包含足够的数据,抱歉!
当'campaign_Date'超过90天时,我需要设置'campaign_Status'= 6。
您好,
我有一个存储DATETIME的列(campaign_Date)。使用存储过程我需要检查存储的日期是否为90天(或更长)。
任何帮助都会很棒。
感谢。
答案 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
由于此状态因日期而异,因此会快速过时,您可以将其设为计算列。