2010-04-29 14 views
9

मेरे पास निम्न क्वेरी जो एक तारीख चर, जो संग्रहीत प्रक्रिया के अंदर उत्पन्न होता है का उपयोग करता है:एसक्यूएल दिनांक वैरिएबल वैल्यू को सही तरीके से कैसे सेट करें और इसका इस्तेमाल कैसे करें?

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

समस्या यह है कि @sp_Date मूल्य अनदेखा किया जा रहा प्रतीत होता है और मैं क्यों सोच रहा हूँ है? क्या मैंने इसे गलत तरीके से परिभाषित किया है या इस्तेमाल किया है?

एसक्यूएल Microsoft SQL सर्वर 2008

उपयोगकर्ता त्रुटि ...

धन्यवाद, आर

+1

आप कैसे जानते हैं कि इसे अनदेखा किया जा रहा है? क्या आप आउटपुट में पंक्तियां देखते हैं जहां 'LastAdDate' 6 दिन पहले की तुलना में पहले है? – Aaronaught

+1

अनदेखा करके आपका क्या मतलब है? फ़िल्टर नहीं कर रहा है या क्या? –

+1

यह डेटा में खींच रहा है जो 6 महीने पहले से अधिक समय से है। फ्रांसिस्को सोटो, हाँ, तारीख को फ़िल्टर नहीं कर रहा है। – flavour404

उत्तर

14

आपका वाक्य रचना ठीक है, यह वापस आ जाएगी पंक्तियों जहां पिछले 6 महीनों में LastAdDate झूठ;

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 

क्या आप वाकई LastAdDate प्रकार DATETIME की है?

+1

वास्तव में आप सही थे, यह DATETIME नहीं था smalldatetime था और मैंने समस्या का समाधान किया है। – flavour404

2

आप मैन्युअल रूप से स्थिर तारीख मूल्यों के साथ क्वेरी बाहर लिखते हैं (जैसे '2009-10- 2 9 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 > '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

यदि मैं मैन्युअल रूप से क्वेरी लिखता हूं तो तारीख पहलू ठीक काम करता है, लेकिन अगर मैं इसे संग्रहीत प्रक्रिया में गतिशील रूप से सेट करता हूं तो मुझे एक बड़ा डेटासेट मिलता है, किसी कारण से अनदेखा की तारीख ... – flavour404

+1

@ flavour404 - तो, ​​यदि आप कोशिश करते हैं मेरे पोस्ट में जोड़े गए दो प्रश्न, वे सही तरीके से काम करते हैं? – Thomas

+1

हां वे सही तरीके से काम करते हैं। – flavour404

संबंधित मुद्दे