2010-04-29 19 views
9

Ben saklı yordam içinde oluşturulan bir tarih değişkeni kullanır aşağıdaki sorgu:SQL Tarih değişkeni değeri nasıl ayarlanmalı ve kullanılmalıdır?

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)) 

sorun @sp_Date değeri göz ardı ediliyor gibi görünüyor ve neden merak ediyorum o? Yanlış tanımlamış mıyım yoksa kullandım mı?

sql microsoft sql-server-2008

Kullanıcı hatası ...

sayesinde R.

+1

Göz ardı edildiğini nereden biliyorsunuz? Çıkışta "LastAdDate" in 6 gün öncesinden önceki satırları görüyor musunuz? – Aaronaught

+1

Göz ardı edilerek ne demek istiyorsunuz? Filtreleme yapmıyor mu? –

+1

6 aydan uzun bir süredir veri çekiyor. Francisco Soto, evet, tarihe göre filtreleme değil. – flavour404

cevap

14

Kişisel sözdizimi gayet iyi, dönecektir satırları nerede son 6 ay içinde LastAdDate yalan;

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 

size LastAdDate tip DATETIME ait olduğundan emin misiniz?

+1

Aslında haklıydınız, DATETIME küçük bir süreç değildi ve sorunu çözdüm. – flavour404

2

el örnek: '(statik tarih değerleri ile sorgu dışarı yazarsam 2009-10- 29 13: 13: 07.440 ') herhangi bir satır var mı? Yani

, aşağıdaki iki sorgular doğru sonuçlar üretmek söylüyor:

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

Sorguyu elle yazmam gerekirse tarih yönü iyi çalışıyor, ancak saklı yordamda dinamik olarak ayarlarsam daha büyük bir veri kümesi alıyorum, bir nedenle yok sayılır ... – flavour404

+1

@ flavour404 - Yani, gönderime eklediğim iki sorgu doğru şekilde çalışıyor mu? – Thomas

+1

Evet, düzgün çalışıyorlar. – flavour404

İlgili konular