2012-10-17 14 views
7

मेरे पास एक MySQL डेटाबेस में "17:16:28 Sep 13, 2011 PDT" फ़ॉर्म का टाइम स्टैंप है। डेटाबेस में फ़ील्ड का प्रकार VARCHAR है। मैं इस VARCHAR को MySQL में TIMESTAMP प्रकार के फ़ील्ड में कनवर्ट करना चाहता हूं।VARCHAR टाइमस्टैम्प को TIMESTAMP में कनवर्ट करें?

मैंने कुछ solutions suggested elsewhere on this site की कोशिश की, जैसे स्ट्रिंग_to_टाइम फ़ंक्शन का उपयोग करना, लेकिन ये समाधान सभी एक अलग प्रकार के टाइमस्टैम्प से शुरू होते हैं।

मैं ऊपर उल्लिखित VARCHAR टाइमस्टैम्प को MySQL द्वारा मान्यता प्राप्त TIMESTAMP में कैसे परिवर्तित करूं, इस तरह से कि मैं अपना डेटा आज तक सॉर्ट कर सकता हूं?

+0

[STR_TO_DATE()] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date), यदि आपका यही मतलब है, आपके पास * लगभग * के लिए प्रारूप विनिर्देश प्रदान करता है। एकमात्र अपवाद जो मैं खोज सकता हूं वह समय क्षेत्र है। क्या आपके पास कई अलग-अलग समय क्षेत्र हैं? –

उत्तर

7

आप MySQL में STR_TO_DATE फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं, इस प्रयास करें:

SELECT STR_TO_DATE("17:16:28 Sep 13, 2011 PDT", '%H:%i:%s %b %d, %Y PDT'); 

संपादित करें: स्वरूपण के साथ

SELECT STR_TO_DATE(field_name, '%H:%i:%s %b %d, %Y PDT') AS new_time 
FROM table_name; 
+0

अन्य उत्तर पर मेरी टिप्पणी देखें। – Mark

+0

क्वेरी के साथ अद्यतन उत्तर। यह भी देखें http://stackoverflow.com/questions/2523286/mysql-convert-tz – Omesh

+1

बहुत धन्यवाद, ओमेश। यह पूरी तरह से काम किया। मुझे पता चला कि मेरे डेटाबेस में केवल दो बार क्षेत्र थे और प्रत्येक बार जोन के लिए मैंने 'tablename सेट newdate = STR_TO_DATE (पुराना दिनांक,'% एच:% i:% s% b% d,% y PDT ') को पुराना दिनांक दिया था, जहां पुराना दिनांक '% पीडीटी%' की तरह (दूसरी बार पीडीटी में पीएसटी बदलना) और जो मैं चाहता था उसे मिला। – Mark

2

उपयोग str_to_date:

select unix_timestamp(str_to_date("17:16:28 Sep 13, 2011 PDT","%T %b %d, %Y PDT")); 

दिन हिस्सा हैं (उदाहरण: 13) 01, 02..etc के रूप में प्रतिनिधित्व नहीं किया जाता है। लेकिन 1, 2, 3 जब यह केवल एक अंक है,% d से% e

सावधान रहें क्योंकि टाइमज़ोन पहचाना नहीं जाएगा, यह स्वरूपण के लिए केवल एक स्ट्रिंग अक्षर है! यदि आपके पास अलग-अलग रिकॉर्ड के लिए अलग-अलग टाइमज़ोन हैं तो आपको उचित टाइमस्टैम्प प्राप्त करने के लिए convert_tz() फ़ंक्शन का उपयोग करना चाहिए।

+0

मैंने देखा है कि हर कोई हमेशा एक ही उदाहरण के साथ आता है, जिसमें "17:16:28 13 सितंबर, 2011 पीडीटी" शामिल है। यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं एक स्ट्रिंग को कन्वर्ट नहीं करना चाहता हूं। मैं एक एसक्यूएल फ़ील्ड को कन्वर्ट करना चाहता हूं। इसके अलावा, convert_tz() के लिए कोई उदाहरण मिला है? – Mark

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि उदाहरण आपके प्रश्न से लिया गया है :) इसके अलावा @ ओमेश ने पहले ही इस क्षेत्र को बदलने के तरीके के दूसरे भाग का उत्तर दिया है। वर्चर वैल्यू को दूसरे क्षेत्र में बदलने के लिए विशेष रूप से आईएमओ का एक अच्छा तरीका है। – Andrew

+0

आह ... आप तारीख के बारे में सही हैं, लेकिन मेरा मतलब यह है कि जहां भी मैं stackoverflow.com पर देखता हूं, लोग फ़ील्ड संदर्भों के बजाय स्ट्रिंग का उपयोग करते हैं, जो वास्तव में मुझे आश्चर्यचकित करता है, क्योंकि MySQL आमतौर पर पढ़ने के बारे में है और तारों के बजाय फ़ील्ड से डेटा संसाधित करें। इसके अतिरिक्त, मुझे समझ में नहीं आता कि आपने unix_timestamp फ़ंक्शन क्यों जोड़ा। यह वास्तव में अनावश्यक है। – Mark

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