2010-09-07 9 views
5

मैं डेटाबेस पर काम कर रहा हूं जो 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 और होने खंड से बचने कर सकते हैं।

+0

आप 'होने' के बजाय 'कहां' का उपयोग कर सकते हैं, लेकिन अन्यथा आप समस्या हल कर चुके हैं - तो आप वास्तव में क्या पूछ रहे हैं? – Andomar

+0

मैंने पिछली बार पोस्ट की गई क्वेरी में, मैं 'हैविंग' के बजाय 'WHERE' का उपयोग नहीं कर सकता, क्योंकि' WHERE' क्लॉज निष्पादित होने पर फ़ील्ड 'mydate' वास्तव में तालिका में मौजूद नहीं है। – Strae

उत्तर

7

अपने प्रारूप से दिनांक बनाने के लिए str_to_date() का उपयोग करने के बारे में क्या?

संपादित अपनी टिप्पणी को पढ़ने के बाद, मैं आपके जैसे एक मेज बनाया:

mysql> SELECT fid, fdate FROM test; 
+------+------------+ 
| fid | fdate  | 
+------+------------+ 
| 1 | 10/9/2010 | 
| 2 | 17/9/2010 | 
| 3 | 19/09/2010 | 
+------+------------+ 

और फिर

किया
mysql> SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY); 
+------+ 
| fid | 
+------+ 
| 1 | 
| 2 | 
+------+ 

काम करने के लिए लगता है। आपको वास्तव में क्या मिलता है?

+0

उदाहरण के लिए, यह कॉमा (07,0 9, 2010) के साथ काम करता है लेकिन स्लेश के साथ नहीं (07/09/2010) यह मेरा मामला है ... मैंने पहले '/ 'को', ',' फिर 'से बदल दिया है, फिर str_to_date – Strae

+0

उदाहरण दिखाता है 'SELECT STR_TO_DATE ('04/31/2004', '% m /% d /% y'); 'काम करना। –

+0

ओउप्स आप सही हैं, मैं '% m /% d /% y' के बजाय'% m-% d-% y' के रूप में प्रारूप गलत लिखा था! धन्यवाद दोस्तों – Strae

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