2010-05-12 45 views
7

Ho un valore orario 04:30:25 che voglio convertire in secondi. C'è qualche funzione dedicata per fare questo?Converti il ​​tempo in secondi in PostgreSQL

So che possiamo estrarre ore, minuti e secondi, quindi calcolare i secondi.

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

Ma io voglio qualche altro modo ...

risposta

3

Forse è possibile renderlo una funzione (solo una configurazione rapida, si prega di rivedere e modificare secondo necessità)?

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

Poi basta usarlo nelle query:

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

Returns:

16225 
22

Hai provato a usare:

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

Se questo non dovesse funzionare si potrebbe tentare di anteporre il valore del tempo con '1970- 01-01 'e provare:

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

Non testato ma sembra che queste siano le uniche opzioni. Probabilmente.

7

puoi saltare epoca o l'intervallo, vale a dire:

SELECT EXTRACT(EPOCH FROM column) from table 
+0

Ho usato 'FLOOR (EXTRACT (EPOCH FROM column))' per arrotondare e ottenere un numero intero – Josh

0

Se si desidera emulare il numerodi MySQL 0 la funzione, è possibile utilizzare una funzione come questa:

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

E ha il vantaggio che funzionerà con intervalli di PostgreSQL (vale a dire: più di periodi di 24 ore), che possa annullare la funzione to_seconds nella risposta accettata .

Problemi correlati