2015-07-26 6 views
6

में टेक्स्ट कन्वर्ट करें मेरे पास पाठ मानों के साथ "उपस्थिति_changed_at" टेक्स्ट टेक्स्ट है यानी '2014/12/17 08:05:28 +0000। मुझे इसे टाइमस्टैम्प में बदलने की ज़रूरत है। PostgreSQL में फ़ंक्शन TO_TIMESTAMP() है, हालांकि रेडशिफ्ट में यह समर्थित नहीं प्रतीत होता है। मैं द्वाराटेक्स्ट को टाइमशैम्प में रेडशिफ्ट

TO_DATE("presence_changed_at",'YYYY/MM/DD HH24:MI:SS') 

जो

2014-12-12 

पैदा करता है समय के बिना तारीख प्राप्त कर सकते हैं, लेकिन मैं टाइमस्टैम्प प्रारूप प्राप्त करने के लिए किसी भी तरह से नहीं मिल रहा।

इस

+0

क्या आपने टाइमस्टैम्प के रूप में COVERT को आजमाया था? कृपया ध्यान दें कि क्वेरी के हिस्से के रूप में COPY कमांड के हिस्से के रूप में रूपांतरण करना बेहतर है। – Guy

उत्तर

3

को सुलझाने के लिए अग्रिम धन्यवाद कोशिश परिवर्तित समारोह:

convert(timestamp,presence_changed_at) 
+0

'CONVERT() 'का सुझाव देने के लिए धन्यवाद; हालांकि, यह फ़ंक्शन केवल तभी काम करता है जब स्ट्रिंग मेजबान (डिफ़ॉल्ट स्ट्रिंग प्रारूप) के लिए बहुत प्रारूप में है। मैं 'TO_TIMESTAMP()' के समान कुछ ढूंढना चाहता हूं ताकि मैं इसे मनमाने ढंग से दिनांक प्रारूप पास कर सकूं। – mjv

0

मैं हाल ही में कई अलग अलग में एक डेटाबेस जहां एक तारीख & समय चर एक VARCHAR प्रकार में पाठ के रूप में जमा हो गया था, पर काम किया प्रारूप (पूछो मत ...), और इसे एक TIMESTAMP प्रकार में परिवर्तित करना पड़ा। चूंकि Redshift में TO_TIMESTAMP() फ़ंक्शन नहीं है, इसलिए मैंने अपने [ब्लॉग] [1] पर यियू जिया द्वारा सुझाई गई चाल का उपयोग किया। संक्षेप में, चाल तारीख परिवर्तित

  • एक टाइमस्टैम्प के परिणामस्वरूप स्ट्रिंग ऊपर
  • कास्ट करने के लिए इनपुट पाठ के समय भाग संलग्न पाने के लिए

    • उपयोग TO_DATE() के लिए है

    उदाहरण के लिए यहाँ निम्न स्वरूपों में से या तो

    • "8 फरवरी में तारीखों के साथ एक क्षेत्र नामित myDate से निपटने के लिए स्निपेट 2013 10:06 PM "
    • " 25/09/2007 16:21:00 "

    यह बल्कि भारी है, लेकिन काम करता है। एक रेगेक्स टेस्ट का परीक्षण यह जांचने के लिए किया जाता है कि तिथि किसी दिए गए लाइन पर दिए गए प्रारूप से मेल खाती है या नहीं। (यह केवल आवश्यक है जब कई संभावित प्रारूपों से निपटना)
    'फरवरी 0 2013' मामला थोड़ा अधिक जटिल है क्योंकि मैं इसे टेक्स्ट के समय हिस्से को TO_DATE() को सबमिट करने से पहले हटा देता हूं, और क्योंकि एक और regex का उपयोग किया जाता है संलग्न किए गए समय हिस्से को निकालें (जैसा कि दूसरे मामले में, उसी उद्देश्य के लिए उपयोग किए जाने वाले सरल सब्सट्रिंग() का विरोध किया गया है)।

    ... , 
    CASE 
        -- Special date indicating "date not available": replaced by NULL 
        WHEN myDate = '31/12/9999 23:59:59' OR myDate = 'Dec 31 9999 11:59PM' THEN NULL 
        -- 'Feb 8 2013 10:06PM' case 
        WHEN myDate ~ '^[JFMASOND][a-z]{2}' THEN 
         CAST(TO_DATE(REGEXP_REPLACE(myDate , '\\s[0-9]{1,2}:[0-9]{2}[AP]M$', ''), 'Mon FMDD YYYY') || REGEXP_REPLACE(myDate , '[JFMASOND][a-z]{2}\\s+[0-9]{1,2}\\s+[0-9]{4}\\s+', ' ') AS TIMESTAMP) 
        -- '25/09/2007 16:21:00' case 
        WHEN myDate ~ '^[0-9]{2}/[0-9]{2}/[0-9]{4} ' THEN 
         CAST(TO_DATE(myDate , 'DD/MM/YYYY HH24:MI:SS') || SUBSTRING(myDate FROM 11) AS TIMESTAMP) 
        ELSE NULL 
    END AS MyNiceTimeStamp, 
    ... 
    
        [1]: http://yiyujia.blogspot.com/2014/04/redshift-convert-integer-to-timestamp.html 
    
  • +0

    में एक केस डालने में गंभीर प्रदर्शन प्रभाव पड़ता है। regexp गंभीर प्रदर्शन और शुद्धता प्रभाव है। –

    2

    यह एक सबसिलेक्ट बिना लाल विचलन में एक unixtime से एक datetime पाने के लिए आश्चर्यजनक रूप से भयानक है। हालांकि, अगर आप यह कर सकते हैं:

    select timestamptz 'epoch' + YOURTIME * interval '1 second'

    +0

    यदि आप यूटीसी में सभी बार संग्रहीत हैं, तो आप TIMESTAMP भी कर सकते हैं और आप TIMESTAMPTZ कॉलम – ZiggyTheHamster

    2

    TO_Timestamp("presence_changed_at",'YYYY/MM/DD HH24:MI:SS') का उपयोग करें वांछित आउटपुट

    +0

    का उपयोग नहीं करते हैं, लेकिन यह एक +00 जोड़ता है क्योंकि यह TIMESTAMPTZ डेटा प्रकार है - यदि मेरा डेटा यूटीसी में नहीं है तो क्या होगा? वह +00 भ्रामक है। – ScottEdwards2000

    +0

    यह मेरे लिए काम कर रहा है –

    1

    आप इसे एक टाइमस्टैम्प पर कास्ट कर सकते हैं। यह एक निर्दिष्ट करने के बिना कुछ उचित प्रारूपों का समर्थन करता है।

    select '2014/12/17 08:05:28 +0000'::timestamp; 
    
         timestamp 
    --------------------- 
    2014-12-17 08:05:28 
    
    select '2014-12-02T05:00:00'::timestamp; 
         timestamp 
    --------------------- 
    2014-12-02 05:00:00 
    
    select '2014-12-02T05:00:00PM'::timestamp; 
         timestamp 
    --------------------- 
    2014-12-02 17:00:00 
    
    संबंधित मुद्दे