2009-09-28 32 views
7

CẬP NHẬTKiểm tra xem DateTime trong DB có hơn 90 ngày qua Thủ tục được lưu trữ

Rõ ràng là tôi không bao gồm đủ dữ liệu, xin lỗi!

Điều tôi cần làm là đặt 'campaign_Status' = 6 khi 'campaign_Date' cũ hơn 90 ngày.


Hi,

Tôi có một cột (campaign_Date) mà các cửa hàng một DATETIME. Sử dụng một thủ tục lưu trữ Tôi cần phải kiểm tra xem ngày lưu trữ là 90 ngày tuổi (hoặc nhiều hơn).

Mọi trợ giúp đều tuyệt vời.

Cảm ơn.

+0

Bạn có nghĩa là bạn muốn trả lại tất cả các hàng từ bảng nơi Campaign_Date là hơn 90 ngày cũ? –

Trả lời

10

này sẽ trả lại tất cả các chiến dịch cũ:

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

này sẽ chọn 1 nếu chiến dịch trở về già, 0 khác:

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

Lưu ý rằng điều kiện truy vấn đầu tiên là sargable: nó sẽ cho phép sử dụng chỉ mục để lọc ngày.

này sẽ cập nhật tất cả các chiến dịch cũ với tình trạng 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 

EDIT: Nếu bạn muốn chọn hồ sơ là 90 hoặc nhiều hơn ngày xưa,

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 

CẬP NHẬT:

Bạn có thể cập nhật các hồ sơ như thế này:

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

Bởi vì tình trạng này sẽ đi ra khỏi ngày nhanh chóng bởi vì nó là phụ thuộc ngày, bạn có thể biến nó thành một cột tính toán để thay thế.

+0

@Munklefish: xem cập nhật của tôi – RedFilter

3

Dưới đây là một biến thể của câu trả lời trước, được bọc trong một thủ tục lưu trữ (như dường như được yêu cầu):

CREATE PROC sp_Campaign_Archive AS 

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

GO 
Các vấn đề liên quan