2013-05-20 9 views
8

मेरे पास एक MySQL तालिका है जिसका उपयोग उस तालिका में लॉग फ़ाइल के लिए किया जाता है, वहां 'log_date' नामक फ़ील्ड होता है और यह दिनांक को निम्न प्रारूप में संग्रहीत करता है (% Y-% m-% d % एच:% i।% S)। डीबी पर दिनांक इस 2013-20-05 00: 00.00 की तरह दिखते हैं। आइए आज की तारीख 2013-20-05 है और मेरे पास 2013-01-01 से आज तक लॉग फाइलें हैं। अगर मैं इस तरह एक प्रश्न चलाएँ:डेटाटाइम MYSQL स्वरूपण द्वारा फ़िल्टर

SELECT * FROM log_table 
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00' 

यह पंक्तियों से अधिक 2013-05-05 00 सहित डीबी में हर पंक्ति लौट रहा है: 00.00

और अगर मैं < रिवर्स (कम) एक> (तब से अधिक) एक क्वेरी के साथ जो इस तरह दिखता है:

SELECT * FROM log_table 
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00' 

फिर यह शून्य पंक्तियां देता है। मुझे लगता है कि टाइम स्टैंप वह समस्या है जिसके कारण मैंने डेट प्रारूप के साथ काम किया है, लेकिन डेटटाइम प्रारूप नहीं। ये क्यों हो रहा है?

+0

'log_date' के लिए डेटा प्रकार क्या है? – Kermit

उत्तर

14

log_date डेटटाइम डेटा प्रकार का होना चाहिए। MySQL DATE फ़ंक्शन का उपयोग करना बहुत आसान है। कुछ उदाहरण

SELECT * FROM log_table 
WHERE DATE(log_date) < '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) > '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY) 
+0

यह आसान हो सकता है लेकिन यह कुशल नहीं है। यदि आप मुझे बताते हैं तो मैं आपको +1 करूंगा। – Kermit

+1

ठीक है, बीमार शूट :)। असंभव कहां खंड में निर्मित कार्यों के साथ अनुक्रमित उपयोग करने के लिए – blotto

+4

+1 डिंग डिंग डिंग – Kermit

0

आप उस के साथ की कोशिश कर सकते ..

WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d') 

तुम भी अब आज का उपयोग कर तारीख प्राप्त कर सकते हैं() कार्य करते हैं।

+1

आपको लगता है कि ऐसा नहीं करना चाहिए: 'DATE_FORMAT()' एक निरंतर है, जो 'DATE_FORMAT ('2013/05/18', '% Y% के खिलाफ परीक्षण करने के बजाय, हर पंक्ति के लिए की जाती है एम% डी ') 'है। तो आप बेहतर करेंगे: 'AUCTION_DATE> = DATE_FORMAT (' 2013/5/18 ','% Y% m% d ') ', जो अनुक्रमणिका का उपयोग कर सकते हैं। – Yvan

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