2013-05-11 3 views
9

मेरे पास एक MySQL डीबी है जिसमें टाइमस्टैम्प फ़ील्ड शीर्षक वाली तारीख है। मैं उन सभी क्षेत्रों का चयन कैसे कर सकता हूं जहां माह वर्तमान माह है?टाइमस्टैम्प कॉलम से वर्तमान महीनों के रिकॉर्ड mysql का चयन करें

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

+0

https://stackoverflow.com/questions/4654961/mysql-only-within-the-current-month/ –

उत्तर

14

अद्यतन

एक बहुत बेहतर तिथियों की सीमा के लिए अपने डेटा को क्वेरी करने के लिए सूचकांक के अनुकूल तरीके

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
    FROM table1 
WHERE timestampfield >= UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH) 
    AND timestampfield < UNIX_TIMESTAMP(LAST_DAY(CURDATE()) + INTERVAL 1 DAY); 

** नोट: ** आप किसी भी कार्य करने के लिए करने के लिए लागू नहीं है अपने कॉलम डेटा, बल्कि शर्तों के दाहिने तरफ सभी आवश्यक गणनाएं करें (जो स्थिरांक हैं और केवल एक बार कवि निष्पादन का मूल्यांकन किया जाता है)। इस तरह आप MySQL को इंडेक्स (एसएस) से लाभ प्राप्त करने की अनुमति देते हैं जो आपके पास timestampfield कॉलम पर हो सकता है।

मूल जवाब:

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
    FROM table1 
WHERE MONTH(FROM_UNIXTIME(timestampfield)) = MONTH(CURDATE()) 
    AND YEAR(FROM_UNIXTIME(timestampfield)) = YEAR(CURDATE()) 

नोट: हालांकि इस क्वेरी सही परिणाम यह प्रभावी रूप से सूचकांक (ते) आप timestampfield स्तंभ पर हो सकता है के समुचित उपयोग को अमान्य कर पैदा करता है (जिसका अर्थ है MySQL एक fullscan प्रदर्शन करने के लिए)

यहाँ है मजबूर किया जाएगा SQLFiddle डेमो

+0

का डुप्लीकेट नहीं है कैसे साल – Drew

+0

के बारे में [YEAR समारोह] (https: //dev.mysql। कॉम/डॉक्टर/रिफमैन/5.5/एन/डेट-एंड-टाइम-functions.html # function_year) इसके लिए, श्री पिएर्स। – hd1

+0

मुझे पता है:> मई 2011 और 2012 को चुनना नहीं चाहेगा – Drew

2

आप अनुक्रमित इस्तेमाल किया जा करना चाहते हैं, स्तंभ के लिए किसी भी समारोह लागू नहीं करते हैं:

SELECT * 
FROM tableX 
WHERE `date` >= UNIX_TIMESTAMP((LAST_DAY(NOW())+INTERVAL 1 DAY)-INTERVAL 1 MONTH) 
    AND `date` < UNIX_TIMESTAMP(LAST_DAY(NOW())+INTERVAL 1 DAY) ; 

कार्यों के लिए इस्तेमाल किया MySQL डॉक्स में पाया जा सकता है: Date and Time functions

2

कोशिश इस

SELECT * FROM table WHERE month(data) = EXTRACT(month FROM (NOW())) 
इस क्वेरी
+1

उपर्युक्त क्वेरी केवल महीने की तुलना करेगी ताकि आपको पिछले वर्ष के महीने का रिकॉर्ड मिल सके .. मुझे लगता है कि सही क्वेरी है "==== तालिका से चुनें जहां माह (डेटा) = एक्स्ट्राक्ट (महीने से (अब())) और वर्ष (डेटा) = एक्सट्रैक्ट (वर्ष से (अब())) ===== " –

6

उपयोग कर सकते हैं इस मदद आप,

Query = "SELECT * FROM <table_name> WHERE MONTH(date_entered) = MONTH(CURDATE())"; 
-2

मुझे लगता है कि MySQL में यह सबसे आसान तरीका है जिसे मैंने कोशिश की है और अच्छी तरह से काम करता है, आप पंक्तियों का चयन करना चाहते हैं जहां timestampfield इस महीने में है।

SELECT * FROM your_table 
WHERE MONTH(timestampfield)=MONTH(CURRENT_DATE()) AND 
YEAR(timestampfield)=YEAR(CURRENT_DATE()); 

ऊपर सभी रिकॉर्ड है कि timestampfield MySQL में इस महीने है

+0

यह चालू माह चुनने के बजाय एक महीने पहले वापस जाएगा। तो आपको पिछले महीने आधे मिलेंगे। – John

+0

@ जॉन मैंने क्वेरी को सही किया है, इसे जांचें ... – indago

1
SELECT 'data of your choice ' 
FROM 'your table' 
WHERE 
MONTH'datecolumn'=MONTH(CURRENT_DATE) 

अपने डेटाबेस से उपयुक्त के साथ 'में' पाठ की जगह वापस आ जाएगी

1
SELECT [columns] 
FROM [the_table] 
WHERE MONTH([date_column]) = MONTH(CURDATE()) 

के बीच पाठ बदलें [ ] ([] सहित) अपने डेटा के साथ।

0

मेरी राय में, निम्नलिखित स्वीकार किए जाते हैं जवाब की तुलना में अधिक पठनीय है ...

SELECT id, FROM_UNIXTIME(timestampfield) timestamp 
FROM table1 
WHERE timestampfield >= DATE_FORMAT(NOW(), '%Y-%m-01') 

नोट: यह रूप में अच्छी तरह अगले महीने से किसी भी रिकॉर्ड का चयन करेंगे। आमतौर पर कोई फर्क नहीं पड़ता, क्योंकि कोई भी नहीं बनाया गया है।

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