2010-05-12 168 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'); 

返回:如果你想

SELECT EXTRACT(EPOCH FROM column) from table 
22

您是否尝试过使用:

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

如果不工作,你可以尝试使用前缀“你的时间价值1970- 01-01'并尝试:

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

未测试,但它似乎这些是你唯一的选择。大概。

7

您可以跳过时期或时间间隔,即模仿MySQL的time_to_sec功能,你可以使用这样的功能:

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函数接受的答案。

+0

我用'FLOOR(EXTRACT(EPOCH FROM column))'来取整并得到一个整数 – Josh 2016-09-12 20:45:56