मैं डेटाबेस पर काम कर रहा हूं जो varchar(10)
mysql फ़ील्ड (इतनी दुखी) में दिनांक संग्रहीत करता है।माइस्क्ल: कनवर्टिंग डेट फ्रो 'डीडी/एमएम/वाई वाई' से 'yyyymmdd'
मैं डेटाबेस संरचना को बदल नहीं सकता (मैं एक छोटा प्लग-इन बना रहा हूं), लेकिन मुझे डेटाबेस खोजने वाली पंक्तियों से पूछताछ करना है जहां यह डेटा फ़ील्ड अगले 10 दिनों के बीच है।
उदाहरण:
| fid | fdate |
| 1 | 10/09/2010 |
| 2 | 17/09/2010 |
| 3 | 19/09/2010 |
मैं, फिड 1 और 2 के साथ पंक्तियों प्राप्त करने के लिए becose तारीख < = अब + 10 दिन है।
आमतौर पर मैं क्वेरी इस तरह का बनाने:
SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
या, दिनांक स्वरूप `yyyymmdd 'में है अगर:
SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), '%Y%m%d');
लेकिन वे प्रारूप dd/mm/yyyy
साथ बेकार।
मैं
SELECT fid, CONCAT(SUBSTRING(fdate, 7, 4), SUBSTRING(fdate, 4, 2), SUBSTRING(fdate, 1, 2)) AS mydate FROM table HAVING mydate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
साथ खोज निकाला है, लेकिन मैं यह थोड़ा एक overkill concat और स्ट्रिंग के साथ दिनांक स्वरूप के पुनर्निर्माण है लगता है, और having
खंड अभ्यस्त क्वेरी गति मदद करते हैं।
कोई विचार?
संपादित
एड्रियानो की टिप्पणी के बाद, सही समाधान
SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);
तो मैं concat और होने खंड से बचने कर सकते हैं।
आप 'होने' के बजाय 'कहां' का उपयोग कर सकते हैं, लेकिन अन्यथा आप समस्या हल कर चुके हैं - तो आप वास्तव में क्या पूछ रहे हैं? – Andomar
मैंने पिछली बार पोस्ट की गई क्वेरी में, मैं 'हैविंग' के बजाय 'WHERE' का उपयोग नहीं कर सकता, क्योंकि' WHERE' क्लॉज निष्पादित होने पर फ़ील्ड 'mydate' वास्तव में तालिका में मौजूद नहीं है। – Strae