2012-08-16 9 views
11

SQL सर्वर में DateTime डेटाटाइप के कॉलम पर LIKE कथन कैसे करते हैं?डेटटाइम प्रकार पर SQL LIKE स्टेटमेंट

अगर मैं निम्नलिखित एसक्यूएल चलाने यह मेरे में 2009 के साथ सभी तिथियों देता है।

SELECT * FROM MyTable where CheckDate LIKE '%2009%' 

हालांकि, अगर मैं सभी अक्तू, नवं & दिसम्बर दिनांकों मैं उम्मीद थी ऐसा करने में सक्षम होना चाहता हूँ निम्नलिखित:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%' 

लेकिन यह मुझे कुछ भी नहीं देता है!

मैं उपयोगकर्ता को फ़िल्टर विकल्प दे रहा हूं जहां वे दिनांक स्ट्रिंग में टाइप करते हैं और जैसे ही वे टाइप करते हैं, मैं डेटा फ़िल्टर करता हूं। इसलिए यदि वे '20' टाइप करते हैं, तो मैं तारीख के भीतर '20' के साथ सभी तिथियां वापस लौटना चाहूंगा (इसलिए यह सभी 2012 तिथियां या दिनांक मूल्य 06/20/1999 हो सकता है)

क्या कोई मदद कर सकता है ?

मैं SQL सर्वर 2008 का उपयोग कर रहा हूं।

अग्रिम धन्यवाद।

+0

धन्यवाद आपके उत्तर के लिए, मैं मैं क्या – Sun

+0

करने के लिए आप जांच की है जो आपके उपयोगकर्ताओं को ऐसी सुविधा चाहते कोशिश कर रहा हूँ के बारे में और अधिक विस्तार के साथ काम को नवीनीकृत किया है? मैंने कभी भी "किसी भी महीने, या अक्टूबर में, या 2010 में" 10 दिनों की सभी गतिविधियों को नहीं खोजना चाहता था। –

उत्तर

20

आप तिथियों के हिस्सों को निकालने के लिए DATEPART फ़ंक्शन का उपयोग कर सकते हैं। यह भी कि आप क्या हासिल करने की मांग कर रहे हैं के बारे में आपके प्रश्नों अधिक स्पष्ट करना चाहिए: इस तरह के MONTH और YEAR रूप

SELECT * FROM MyTable 
where DATEPART(year,CheckDate)=2009 and 
     DATEPART(month,CheckDate) between 10 and 12 

(वहाँ भी विशेष रूप से नाम हैं काम करता है, है, लेकिन मैं स्थिरता के लिए DATEPART पसंद करते हैं, क्योंकि यह सभी घटकों को एक्सेस कर सकते हैं datetime)

आपको किसी भी प्रकार के स्ट्रिंग प्रारूप के रूप में datetime के बारे में सोचने से बचने की कोशिश करनी चाहिए। उन्हें तारों के रूप में व्यवहार करना उन त्रुटियों के सबसे बड़े स्रोतों में से एक है जो हम सामना करते हैं।

2

आप कुछ इस तरह का उपयोग कर सकते हैं:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01'; 
+1

और जब आप इसमें हों - एक ** भाषा स्वतंत्र ** दिनांक प्रारूप - जैसे '200 9 001' का उपयोग करने का प्रयास करें - जो SQL सर्वर के ** ** ** सभी संस्करणों के लिए काम करता है .... –

+3

खतरनाक। जबकि मूल क्वेरी ने 'डेटाटाइम' को एक स्ट्रिंग में रूपांतरण करने के लिए मजबूर किया (और इसलिए हमेशा एक लगातार स्वरूपित मान उत्पन्न करेगा), यह स्ट्रिंग से 'डेटाटाइम' तक रूपांतरणों को मजबूर करता है, और क्षेत्रीय सेटिंग्स के आधार पर, वास्तव में कुछ भी पूछताछ कर सकता है 10 जनवरी 200 9 को या उसके बाद –

5

आप (किसी कारण से) Like ऑपरेटर का उपयोग करने के लिए आप एक varchar में DateTime स्तंभ कन्वर्ट करने के लिए है की जरूरत है।

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%' 
संबंधित मुद्दे