2009-09-28 5 views
7

ACTUALIZACIÓNCompruebe si DateTime en DB tiene más de 90 días de antigüedad a través del Procedimiento almacenado

Evidentemente no incluí datos suficientes, ¡lo siento!

Lo que tengo que hacer es establecer 'campaign_Status' = 6 cuando 'campaign_Date' tiene más de 90 días.


Hola,

que tiene una columna (campaign_Date) que almacena una fecha y hora. Uso de un procedimiento almacenado Necesito verificar si la fecha almacenada tiene 90 días (o más).

Cualquier ayuda sería genial.

Gracias.

+0

Qué quiere decir que desea devolver todas las filas de la tabla, donde Campaign_Date es más de 90 días ¿antiguo? –

Respuesta

10

Esto devolverá todas las campañas de edad:

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

Esto seleccionará 1 si la campaña es viejo, 0 lo contrario:

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

Tenga en cuenta que la primera condición de consulta es sargable: permitirá el uso de un índice para filtrar las fechas.

Esto actualizará todas las campañas de edad con el estado 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: Si desea recoger los registros que son 90 o más días de edad,

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 

ACTUALIZACIÓN:

Puede actualizar los registros de esta manera:

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

Debido a que este estado se vaya fuera de fecha rápidamente, ya que es dependiente de fecha, puede que sea una columna calculada en su lugar.

+0

@Munklefish: ver mi actualización – RedFilter

3

Aquí hay una variación en las respuestas anteriores, envuelto en un procedimiento almacenado (como parecía que se le pregunte):

CREATE PROC sp_Campaign_Archive AS 

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

GO 
Cuestiones relacionadas