2010-06-08 15 views
10

महीने/वर्ष का उपयोग करके मैं अपनी तालिका से रिकॉर्ड कैसे प्राप्त कर सकता हूं? मैं एक मेज इस तरह है:किसी क्षेत्र का महीना चुनें

Name - varchar 
DueDate -datetime 
Status -boll 

DueDate परियोजना नियत तारीख है, मैं माह/वर्ष, नहीं पूर्ण तिथि करने के लिए इसी रिकॉर्ड चाहता हूँ, मुझे विशेष माह के लिए रिकॉर्ड मतलब है।

मैं इसे mysql में कैसे कर सकता हूं?

+0

ऐसा लगता है कि टाइपिंग पर हर कोई मेरे से तेज था! – espais

उत्तर

35

सीधे शब्दों में MONTH() और YEAR() का उपयोग करें:

SELECT * FROM Project WHERE MONTH(DueDate) = 1 AND YEAR(DueDate) = 2010 
+5

यदि कोई 'duedate' कॉलम पर मौजूद है तो यह इंडेक्स का उपयोग नहीं करेगा। टोड आर का जवाब सबसे अच्छा विकल्प है। –

+0

बहुत उपयोगी, धन्यवाद! – tribulant

3
SELECT Name FROM Table Where MONTH(datetime) = 1; 

1 = जनवरी।

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_month

+0

क्या होगा यदि दिनांक "1 जनवरी 2010" और "2 जनवरी 200 9" है। आपकी पूछताछ के मुताबिक यह – Salil

+0

हम्मम दोनों पाएगा .. निश्चित रूप से वह समझ सकता है कि वह वर्ष का उपयोग कर सकता है, मैं उसे उत्तर देने के लिए नहीं बल्कि उसे मार्गदर्शन करने के लिए यहां हूं। मैंने मासिक() फ़ंक्शन के लिए हेम दस्तावेज़ दिया, मुझे यकीन है कि वह वर्ष(), DAY() और HOUR() :) – RobertPitt

+0

देखेंगे यदि यह 'duedate' कॉलम पर मौजूद है तो यह अनुक्रमणिका का उपयोग नहीं करेगा। टोड आर का जवाब सबसे अच्छा विकल्प है। –

1
SELECT * WHERE MONTH(DueDate) = '5' AND YEAR(DueDate) = '1987'; 
19

आप इस्तेमाल कर सकते हैं बयान के बीच एक:

select * from Project 
    where DueDate between '2010-01-01' and '2010-02-01' 
+6

+1: यदि कोई 'duedate' कॉलम पर मौजूद है तो यह एक अनुक्रमणिका का उपयोग करेगा; माह और वर्ष कार्यों का उपयोग करने वाले जवाब नहीं होंगे। –

3

यह चालू वर्ष की विशिष्ट महीने का चयन करेंगे

SELECT * FROM Project WHERE MONTH(DueDate) = 1 AND YEAR(DueDate) = YEAR(NOW()) 
4

MONTH() और YEAR() के साथ इस अनुशंसित समाधान का उपयोग न करें। यह MySQL को कॉलम DueDate पर इंडेक्स का उपयोग करने से रोकता है यदि आपके पास है और यह तालिका में सभी पंक्तियों की जांच करने के लिए MySQL को मजबूर करता है।

SELECT * FROM Project 
WHERE DueDate BETWEEN '2010-01-01' AND '2010-02-01' 

या खंड के साथ एक और समाधान:

इसके बजाय, BETWEEN खंड इस तरह का उपयोग

SELECT * FROM Project 
WHERE DueDate IN ('2010-01-01', '2010-01-02', '2010-01-03', ..., '2010-01-31') 

यह दो समाधान MySQL सूचकांक का उपयोग करने की अनुमति देता है, तो प्रदर्शन बेहतर होगा।

+3

दूसरा एक बेकार है। कौन 2 की बजाय 31 तिथियां प्रदान करना पसंद करेगा ?! –

+0

प्रत्येक फ़ंक्शन का उपयोग होता है। शायद किसी को तारीखों की सूची से चयन करने की जरूरत है। – GeneCode

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