2010-04-29 6 views
9

Tengo la siguiente consulta que utiliza una variable de fecha, que se genera dentro del procedimiento almacenado:SQL ¿Cómo establecer correctamente un valor de variable de fecha y usarlo?

DECLARE @sp_Date DATETIME 
SET @sp_Date = DateAdd(m, -6, GETDATE()) 

SELECT DISTINCT pat.PublicationID 
    FROM PubAdvTransData AS pat 
    INNER JOIN PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID 
    WHERE (pat.LastAdDate > @sp_Date) AND (pa.AdvertiserID = 12345)) 

El problema es que el valor @sp_Date parece estar siendo ignorada y me pregunto por qué? ¿Lo he definido o usado incorrectamente?

SQL de Microsoft SQL-server-2008

de error del usuario ...

Gracias, R.

+1

¿Cómo sabes que está siendo ignorado? ¿Ves filas en el resultado donde 'LastAdDate' es anterior a 6 días? – Aaronaught

+1

¿Qué quiere decir con ignorado? ¿No está filtrando o qué? –

+1

Está extrayendo datos que datan de hace más de 6 meses. Francisco Soto, sí, no filtrando la fecha. – flavour404

Respuesta

14

Su sintaxis es fina, devolverá las filas donde LastAdDate se encuentra dentro de los últimos 6 meses;

select cast('01-jan-1970' as datetime) as LastAdDate into #PubAdvTransData 
    union select GETDATE() 
    union select NULL 
    union select '01-feb-2010' 

DECLARE @sp_Date DATETIME = DateAdd(m, -6, GETDATE()) 

SELECT * FROM #PubAdvTransData pat 
    WHERE (pat.LastAdDate > @sp_Date) 

>2010-02-01 00:00:00.000 
>2010-04-29 21:12:29.920 

¿Seguro LastAdDate es de tipo DATETIME?

+1

En realidad, usted tenía razón, no era DATETIME, era pequeño y resolví el problema. – flavour404

2

Si escribe manualmente a cabo la consulta con valores de fecha estáticos (por ejemplo '2009-10- 29 13: 13: 07.440 ') ¿recibe alguna fila?

Por lo tanto, usted está diciendo que las siguientes dos consultas producen resultados correctos:

SELECT DISTINCT pat.PublicationID 
FROM PubAdvTransData AS pat 
    INNER JOIN PubAdvertiser AS pa 
     ON pat.AdvTransID = pa.AdvTransID 
WHERE (pat.LastAdDate > '2009-10-29 13:13:07.440') AND (pa.AdvertiserID = 12345)) 

DECLARE @sp_Date DATETIME 
SET @sp_Date = '2009-10-29 13:13:07.440' 

SELECT DISTINCT pat.PublicationID 
FROM PubAdvTransData AS pat 
    INNER JOIN PubAdvertiser AS pa 
     ON pat.AdvTransID = pa.AdvTransID 
WHERE (pat.LastAdDate > @sp_Date) AND (pa.AdvertiserID = 12345)) 
+1

Si escribo la consulta manualmente, el aspecto de la fecha funciona bien, pero si lo configuro dinámicamente en el procedimiento almacenado obtengo un conjunto de datos más grande, la fecha se ignora por algún motivo ... – flavour404

+1

@ flavour404 - Entonces, si prueba el dos consultas que agregué a mi publicación, ¿funcionan correctamente? – Thomas

+1

Sí, funcionan correctamente. – flavour404

Cuestiones relacionadas