2009-10-27 19 views
64

MySQL मेंएसक्यूएल सर्वर डेटाटाइम पसंद का चयन करें?

select * from record where register_date like '2009-10-10%' 

एसक्यूएल सर्वर में वाक्य रचना क्या है?

धन्यवाद।

+0

आप वास्तव में क्या जांचना चाहते हैं? क्या दिया गया डेटाटाइम एक निर्धारित तिथि हिस्सा है? या कुछ और? –

+1

इस पर एक स्वस्थ चर्चा के लिए (जिसमें स्ट्रिंग्स जैसे 'DATETIME' मानों का इलाज करना बुरा क्यों है, और' BETWEEN' या '> = और <=') का उपयोग करने में बुरा क्यों हो सकता है, देखें [यह ब्लॉग हारून बर्ट्रेंड द्वारा] (http://is.gd/4EgDF)। –

+0

[टैग: जैसे-ऑपरेटर] टैग के लिए आपके प्रश्न में कम से कम '5' वोट हैं। क्या मैं कृपया अनुरोध कर सकता हूं कि आप [टैग: एसक्यूएल-जैसे] को [synonym] (http://stackoverflow.com/tags/like-operator/synonyms) के रूप में सुझाव दें? – Kermit

उत्तर

97

के रूप में यह समय घटक पर ध्यान नहीं देता आप DatePart() फ़ंक्शन

SELECT * FROM record 
WHERE (DATEPART(yy, register_date) = 2009 
AND DATEPART(mm, register_date) = 10 
AND DATEPART(dd, register_date) = 10) 

मैं इस तरह से आसान को पढ़ने के लिए मिल जाए, इस्तेमाल कर सकते हैं, और आप के लिए अगले दिन की तारीख का उपयोग करने की जरूरत नहीं है अपने चयन को प्रतिबंधित करें। उपयुक्त डेटपर्ट कोड का उपयोग करके अतिरिक्त क्लॉज जोड़कर आप अधिक या कम ग्रैन्युलरिटी पर जा सकते हैं, उदा।

AND DATEPART(hh, register_date) = 12) 

रिकॉर्ड बना पाने के लिए 12 और के बीच 1.

वैध तर्क की पूरी सूची के MSDN DATEPART docs से परामर्श करें।

+0

से पहले प्रत्येक तारीख शामिल होगी यदि कोई है register_date पर इंडेक्स, यह पूरी तरह से इंडेक्स को अनदेखा कर देगा और प्रदर्शन भुगतना होगा। शायद काफी बुरी तरह से। –

+0

ठीक है, लेकिन यह प्रश्न की तारीख के बाद दिन के समतुल्य स्ट्रिंग का उपयोग करने की समस्या से बचता है, जिसे यहां कुछ उत्तरों में सुझाव दिया जा रहा है। ट्रिकी जहां प्रश्न की तारीख महीने या साल का अंत है। –

+3

+1 यह क्यों कम किया गया था? – Andomar

35

DATETIME चर के खिलाफ की तरह ऑपरेटर के लिए कोई सीधा समर्थन नहीं है, लेकिन आप हमेशा एक VARCHAR को DATETIME डाली कर सकते हैं:

SELECT (list of fields) FROM YourTable 
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%' 

CONVERT समारोह में उपलब्ध "शैली" की एक पूरी सूची के लिए MSDN docs की जाँच करें।

मार्क

+0

मुझे लगता है कि मुझे समय-समय पर संभालने के लिए * कम से कम * वांछनीय तरीका लगता है ... –

+0

सहमत हुए - लेकिन ओपी ने समय के साथ डेटाटाइम को संभालने का एक तरीका अनुरोध किया .... लेकिन मैं सहमत हूं - समय-समय पर> = और श्रेणियों के साथ संभाला जाना चाहिए। <= या BETWEEN - बहुत बेहतर दृष्टिकोण –

+0

सभी को धन्यवाद। क्षमा करें मैं एसक्यूएल के लिए सिर्फ एक नौसिखिया हूँ। – Paisal

9

आप, आप एक स्ट्रिंग रूपांतरण करने के लिए मजबूर कर रहे हैं करते हैं। बेहतर होगा एक प्रारंभ/समाप्ति तिथि सीमा का निर्माण, और उपयोग करने के लिए होगा:

declare @start datetime, @end datetime 
select @start = '2009-10-10', @end = '2009-11-10' 
select * from record where register_date >= @start 
      and register_date < @end 

यह सूचकांक का उपयोग करने (यदि वहाँ register_date पर एक है) के बजाय एक मेज स्कैन से की अनुमति देगा।

+0

धन्यवाद। क्षमा करें मैं एसक्यूएल के लिए सिर्फ एक नौसिखिया हूँ। – Paisal

7

आप टेक्स्ट फॉर्म में तारीख प्राप्त करने के लिए CONVERT का उपयोग कर सकते हैं। आप एक varchar (10) को परिवर्तित करते हैं, तो आप = तरह के बजाय का उपयोग कर सकते हैं:

select * 
from record 
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10' 

या आप अतिरिक्त लाभ यह एक सूचकांक का उपयोग कर सकता है कि के साथ एक ऊपरी और निचले सीमा की तारीख का उपयोग कर सकते:

select * 
from record 
where '2009-10-10' <= register_date 
and register_date < '2009-10-11' 
+0

बहुत बहुत धन्यवाद। – Paisal

+0

मुझे लगता है कि क्लॉज में टाइपो है, यह * "जहां '200 9 -10-10'> = register_date" * –

+0

@mr_eclair होना चाहिए: ऐसा मत सोचो, इसमें 11 अक्टूबर – Andomar

3

आप LIKE का उपयोग करके तारीख खोजने योग्य बनाने के लिए कनवर्ट का भी उपयोग कर सकते हैं। उदाहरण के लिए,

select convert(VARCHAR(40),create_date,121) , * from sys.objects where  convert(VARCHAR(40),create_date,121) LIKE '%17:34%' 
1

SQL सर्वर में तिथियों के लिए LIKE ऑपरेटर का एक बहुत ही आकर्षक कवरेज है। यह केवल अमेरिकी दिनांक प्रारूप का उपयोग कर काम करता है। एक उदाहरण के रूप में आप की कोशिश कर सकते:

... WHERE register_date LIKE 'oct 10 2009%' 

मैं SQL सर्वर 2005 में इस परीक्षण किया है और यह काम करता है, लेकिन क्या तुम सच में विभिन्न संयोजनों की कोशिश करनी होगी। अजीब बातें मैंने देखा है:

  • आप केवल तारीख के भीतर विभिन्न उप क्षेत्रों, के लिए सब कुछ या कुछ पाने के लिए लग रहे हैं, उदाहरण के लिए, यदि आप 'अप्रैल 2%' के लिए खोज आप केवल 20 वीं के दशक में कुछ भी - यह 2 की छूट देता है।

  • एक भी अंडरस्कोर '_' का उपयोग करते हुए एक भी (वाइल्डकार्ड) चरित्र का प्रतिनिधित्व करने नहीं करता है पूरी तरह से काम करते हैं, उदाहरण के लिए, WHERE mydate LIKE 'oct _ 2010%' होगा वापसी नहीं सभी तिथियों से पहले 10 वीं - यह कुछ भी नहीं देता है, असल में!

  • प्रारूप कठोर अमेरिकी है: 'mmm dd yyyy hh:mm'

इसलिए यदि किसी को भी इस थोड़ा आगे ले जाने की, मेरे मेहमान हो चाहता है मैं, यह likeing सेकंड के लिए एक प्रक्रिया जकड़ना करने के लिए मुश्किल मिल गया है!

उम्मीद है कि इससे मदद मिलती है।

6

दुर्भाग्यवश, 'LIKE' का उपयोग करके वेटरटाइम की तुलना में डेटाटाइम की तुलना करना संभव नहीं है लेकिन वांछित आउटपुट किसी अन्य तरीके से संभव है।

select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0 
+0

यह मेरे लिए काम किया। बहुत बहुत धन्यवाद –

1

LIKE ऑपरेटर महीने या तारीख की तरह तिथि भागों के साथ काम नहीं करता है, लेकिन DATEPART ऑपरेटर करता है।

कमान सभी खातों जिसका ओपन दिनांक 1 पर था पता लगाने के लिए:

SELECT * 
    FROM Account 
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1` 

* कास्टिंग OpenDt क्योंकि यह मूल्य DATETIME में है और न सिर्फ DATE है।

0

मैंने अपनी समस्या को हल किया। सुधार के लिए सुझावों के लिए धन्यवाद। सी # में उदाहरण।

string dd, mm, aa, trc, data; 
dd = nData.Text.Substring(0, 2); 
mm = nData.Text.Substring(3, 2); 
aa = nData.Text.Substring(6, 4); 
trc = "-"; 
data = aa + trc + mm + trc + dd; 

"Select * From bdPedidos Where Data Like '%" + data + "%'"; 
संबंधित मुद्दे