2012-06-30 8 views
5

से सभी रिकॉर्ड्स 'छोटे' का चयन करें, मैं [Orders] से सभी रिकॉर्ड्स चुनना चाहता हूं जिनमें [Submissiondate] 7 दिनों से कम है।7 दिनों से

मैं पूरी तरह से स्टंप हूं।

SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate) 

काम नहीं करता: यह प्रश्न मैं क्रियान्वित कर रहा हूँ है।

+0

कोई अग्रिम? क्या आपको समाधान मिला? –

उत्तर

0

तुम भी कोशिश कर सकते हैं इस DATEDIFF

SELECT * FROM [Orders] WHERE datediff(d,SubmissionDate,GETDATE()) > 7 

जहां GetDate() आज की तारीख है और d दिनों में अंतर

select datediff(d,'2012/06/23',GETDATE()) 

आप 7 देना चाहिए है क्योंकि यह 7 दिन पहले

5

यदि आपका मतलब है कि आप SubmissionDate के साथ @SubmissionDate और @SubmissionDate - 7 days के बीच पंक्तियां चाहते हैं, तो यह इस प्रकार है मैं लागू होता है कि Transact-SQL में:

WHERE [SubmissionDate] BETWEEN DATEADD(DAY, -7, @SubmissionDate) 
          AND @SubmissionDate 

ध्यान दें कि BETWEEN तात्पर्य >= और <=

WHERE [SubmissionDate] > DATEADD(DAY, -7, @SubmissionDate) 
    AND [SubmissionDate] < @SubmissionDate 
1

यह मानते हुए कि एसक्यूएल पैरामीटर @SubmissionDate तिथि (और समय) अब है: यदि आप सख्त असमानताओं की जरूरत है, यह कुछ इस तरह करते हैं।

SELECT * FROM [Orders] WHERE ([SubmissionDate] >= DATEADD(DD, -7, DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)))) 

दो इस समाधान के लिए महत्वपूर्ण टिप्पणी:

  1. टाइम 'भाग' से हटाया जा रहा है @SubmissionDate आप निम्न क्वेरी कि उन [Orders]पिछले 7 दिनों के भीतर प्रस्तुत वापस आ जाएगी इस्तेमाल कर सकते हैं ।
  2. , वहाँ के रूप में प्रतिबंध नहीं 'करने के लिए दिनांक' शामिल करना[Orders] प्रस्तुत 'आज' (समय क्वेरी निष्पादित किया जा रहा है जब तक)।

निम्नलिखित कोड केवल तारीख के समय 'भाग' प्राप्त करने के लिए है (इस अन्य SO thread से निकाला गया)।

DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)) 
+0

समय भाग को रीसेट करने के बारे में अच्छा बिंदु। लेकिन अगर आप मानते हैं कि 'सबमिशनडेट' वर्तमान दिनांक और समय का प्रतिनिधित्व करता है, तो तर्क का उपयोग करने में बहुत अधिक बिंदु नहीं है, है ना? आप इसके बजाय 'GETDATE() 'या' CURRENT_TIMESTAMP' का उपयोग कर सकते हैं। –

+0

मेरा मतलब यह है कि यदि ओपी * एक तर्क का उपयोग कर रहा है, तो यह संभवतः (मेरी राय में) है कि तर्क एक * मनमानी * टाइमस्टैम्प का प्रतिनिधित्व करता है, हमेशा चालू नहीं होता है। –

+0

@AndriyM हाँ मैं तुम्हारा बिंदु देखता हूं, हो सकता है कि लेखक कुछ स्पष्टीकरण दे सके, अगर इसका इरादा है कि '@ सबमिशनडेट' परम। वर्तमान दिनांक (और समय) आवंटित करता है। खैर, मैं हमेशा डीबी-सर्वर द्वारा प्रदान की गई सीधे तिथि और समय का उपयोग करने के लिए प्रश्नों से बचने की कोशिश करता हूं और हमेशा पैरामीटर का उपयोग करता हूं, इसलिए मुझे लगता है कि 'सबमिशनडेट' का मतलब वर्तमान दिनांक और समय आवंटित करने के लिए किया गया था। –

0

से इस

चुनें * प्रयास करें [आदेश] जहां [submission_date] < NOW() - INTERVAL 7 दिन;

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