2010-05-12 19 views
7

में सेकंड के लिए समय में कनवर्ट करें मैं एक समय मूल्य 04:30:25 कि मैं सेकंड के लिए परिवर्तित करना चाहते है। वहाँ यह करने के लिए किसी भी समर्पित समारोह है?PostgreSQL

मुझे पता है कि हम घंटे, मिनट और सेकंड निकाल सकते हैं, तो सेकंड की गणना।

SELECT EXTRACT(hour FROM t)*60*60 
     + EXTRACT(minutes FROM t)*60 
     + EXTRACT(seconds FROM t) 
    FROM test; 

लेकिन मैं किसी और तरीके से चाहते हैं ...

उत्तर

3

शायद आप यह एक समारोह कर सकते हैं (बस एक त्वरित सेटअप, की समीक्षा करने और आवश्यकतानुसार बदलें)?

CREATE OR REPLACE FUNCTION to_seconds(t text) 
    RETURNS integer AS 
$BODY$ 
DECLARE 
    hs INTEGER; 
    ms INTEGER; 
    s INTEGER; 
BEGIN 
    SELECT (EXTRACT(HOUR FROM t::time) * 60*60) INTO hs; 
    SELECT (EXTRACT (MINUTES FROM t::time) * 60) INTO ms; 
    SELECT (EXTRACT (SECONDS from t::time)) INTO s; 
    SELECT (hs + ms + s) INTO s; 
    RETURN s; 
END; 
$BODY$ 
    LANGUAGE 'plpgsql'; 

तो बस आपके प्रश्नों में इसका इस्तेमाल करते हैं:

SELECT to_seconds('04:30:25'); 

रिटर्न:

16225 
22

आप उपयोग करने की कोशिश है:

SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25'); 

है कि आप के साथ 'अपने समय मूल्य उपसर्ग की कोशिश कर सकते काम नहीं करता है 1970- 01-01 'और कोशिश:

SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01 04:30:25'); 

जांची नहीं लेकिन ऐसा लगता है कि वे आपके ही विकल्प हैं। शायद।

7

आप युग या अंतराल, यानी छोड़ सकते हैं:

SELECT EXTRACT(EPOCH FROM column) from table 
+0

मैं 'मंजिल (निकालने (स्तंभ से युग)) का इस्तेमाल किया' नीचे दौर और एक पूर्णांक प्राप्त करने के लिए – Josh

0

यदि आप चाहते हैं MySQL केअनुकरण करने के लिए 0 समारोह, तो आप इस तरह एक समारोह इस्तेमाल कर सकते हैं:

CREATE OR REPLACE FUNCTION time_to_sec(t text) 
    RETURNS integer AS 
$BODY$ 
DECLARE 
    s INTEGER; 
BEGIN 
    SELECT (EXTRACT (EPOCH FROM t::interval)) INTO s; 
    RETURN s; 
END; 
$BODY$ 
    LANGUAGE 'plpgsql'; 

यह है लाभ यह है कि PostgreSQL अंतराल के साथ काम करेंगे (यानी: 24 घंटे की अवधि की तुलना में अधिक) है, जो स्वीकार किए जाते हैं जवाब में to_seconds समारोह टूट जाएगा ।