2010-11-10 14 views
7

मैंने डीएस/एमएम/yyyy तिथियों के साथ mysql में एक CSV फ़ाइल आयात की है अब इसे टेक्स्ट टू डेट प्रारूप में कनवर्ट करने के लिए एक क्वेरी की आवश्यकता है yyy-mm-ddक्वेरी एसक्यूएल टेक्स्ट फ़ील्ड डीडी/एमएम/yyyy को डेट फ़ील्ड में कनवर्ट करें yyyy-mm-dd

चीयर्स

एस

उत्तर

13

आप STR_TO_DATE(str, format) MySQL समारोह इस्तेमाल कर सकते हैं।

उदाहरण एक परिवर्तित एक के लिए my_date_col से स्विच:

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 

UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 

ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 

ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 
+0

धन्यवाद, मैं इसे आजमाउंगा! – stefano

+1

कृपया उत्तर में से किसी एक को चिह्नित करने पर विचार करें ताकि हम जान सकें कि प्रश्न बंद है;) – conny

2

आप निम्नलिखित तरीके से STR_TO_DATE() उपयोग कर सकते हैं करने के लिए अपने पाठ परिवर्तित करने के लिए एक DATE:

STR_TO_DATE(datefield , "%d/%m/%Y") 

आप में इस DATE की जरूरत है एक विशिष्ट प्रारूप, आप DATE_FORMAT() का उपयोग कर सकते हैं।
यह शायद अपने मामले में आवश्यक नहीं है, लेकिन यहाँ संपूर्णता के लिए एक उदाहरण है:

DATE_FORMAT(STR_TO_DATE(datefield , "%d/%m/%Y") , "%Y/%m/%d") 

तो, आप एक ही UPDATE साथ पूरे मेज पर ऐसा करने के लिए पुन: स्वरूपित डेटा के साथ मौजूदा डेटा को बदलने के लिए कर सकता है (जबकि डेटाप्रकार ही) रखने: या

UPDATE tableName 
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y"),"%Y/%m/%d"); 

, यदि आप स्तंभ DATE की डेटाप्रकार कनवर्ट करना चाहते हैं आप एक नया DATE स्वरूपित स्तंभ बनाने के लिए है कि कॉलम भरने के लिए ऊपर अद्यतन का उपयोग तालिका बदल सकता है, मूल कॉलम, और वें हटा दें एन (वैकल्पिक रूप से) पुराने नाम पर नए कॉलम का नाम बदलें।

ALTER tableName 
ADD modifiedDate DATE; 

UPDATE tableName 
SET modifiedDate = DATE_FORMAT(STR_TO_DATE(originalDate ,"%d/%m/%Y") ,"%Y/%m/%d"); 

ALTER tableName 
DROP COLUMN originalDate; 

ALTER tableName 
CHANGE COLUMN modifiedDate originalDate; 
+0

यह काम नहीं कर रहा है .. क्या आप एक बेवकूफ डेमो दिखा सकते हैं। – user1896796

1

यह काम करना चाहिए, लेकिन यह नहीं है: काम नहीं करता

UPDATE db_test SET anticipated_court_date = DATE_FORMAT(STR_TO_DATE(anticipated_court_date,"%d/%m/%Y"),"%Y-%m-%d"); 

सर्वर संस्करण: 5.0.95-समुदाय के लिए लॉग इन MySQL

BEGIN; 
ALTER TABLE `date_test` 
    ADD COLUMN `my_date_col_converted` DATE; 
UPDATE `date_test` 
    SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y'); 
ALTER TABLE `date_test` 
    DROP COLUMN `my_date_col`; 
ALTER TABLE `date_test` 
    CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE; 
COMMIT; 

इसके अलावा इस काम करना चाहिए सामुदायिक संस्करण (जीपीएल)

हालांकि यह काम करता है:

SELECT STR_TO_DATE('8/31/12', '%m/%d/%Y'); // WORKS 

MySQL का उपयोग करना - मुझे कोई समाधान नहीं मिला जो विश्वसनीय रूप से काम करता था। यहां तक ​​कि वही सटीक तारीख सफलतापूर्वक परिवर्तित नहीं हुई थी।

The solution I've found is this: PHP 
$user_date = "8/31/12"; // WORKS 
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date)); 
0

उपरोक्त सहायक थे, लेकिन निम्नलिखित ने MySQL पर मेरे लिए काम किया।

ALTER TABLE `tablename` ADD `newcolumn` DATE NOT NULL ; 
UPDATE `tablename` SET `newcolumn`=STR_TO_DATE(`oldcolumn`, '%d/%c/%Y') 

अब पुराने कॉलम को हटाएं (यदि आप चाहें)।

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