2010-05-12 27 views
7

Ich habe einen Zeitwert 04:30:25, den ich in Sekunden konvertieren möchte. Gibt es dafür eine spezielle Funktion?Zeit in Sekunden in PostgreSQL umwandeln

Ich weiß, dass wir Stunden, Minuten und Sekunden extrahieren können, dann berechnen Sie die Sekunden.

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

Aber ich will eine andere Art und Weise ...

Antwort

3

Vielleicht können Sie es zu einer Funktion machen (nur eine schnelle Einrichtung, bitte überprüfen und ändern wie benötigt)?

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'; 

Dann nutzen Sie es einfach in Ihre Fragen:

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

Returns:

16225 
22

Haben Sie versucht, mit:

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

Wenn das nicht Sie arbeiten könnten versuchen, Ihre Zeit Wert Präfix mit ‚1970- 01-01 'und versuchen:

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

Nicht getestet, aber es scheint, dies sind Ihre einzigen Optionen. Wahrscheinlich.

7

Sie Epoche oder Intervall überspringen kann, das heißt:

SELECT EXTRACT(EPOCH FROM column) from table 
+0

Ich benutzte 'FLOOR (EXTRACT (EPOCH FROM Spalte))' zum Abrunden und erhalten eine ganze Zahl – Josh

0

Wenn Sie möchten, Emulation von MySQL time_to_sec Funktion, könnten Sie eine Funktion wie folgt verwendet werden:

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'; 

Es hat den Vorteil, dass es mit PostgreSQL Intervallen arbeitet (dh mehr als 24-Stunden-Zeiträume), die die to_seconds Funktion in der akzeptierten Antwort brechen .

Verwandte Themen