我有一个时间值04:30:25,我想转换为秒。 有没有专门的功能来做这个?
我知道我们可以提取小时,分钟和秒,然后计算秒数。
SELECT EXTRACT(hour FROM t)*60*60
+ EXTRACT(minutes FROM t)*60
+ EXTRACT(seconds FROM t)
FROM test;
但我想要其他方式...
答案 0 :(得分:30)
您是否尝试过使用:
SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25');
如果这不起作用,您可以尝试使用'1970-01-01'为时间值添加前缀,然后尝试:
SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01 04:30:25');
未经测试,但似乎这些是您唯一的选择。可能。
答案 1 :(得分:11)
您可以跳过纪元或间隔,即:
SELECT EXTRACT(EPOCH FROM column ) from table
答案 2 :(得分: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
答案 3 :(得分:2)
如果你想模仿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
函数。
答案 4 :(得分:1)
作为@hdiogenes 解决方案的简化方法,只需在查询中使用它:
SELECT EXTRACT (EPOCH FROM '04:30:25'::time)
答案 5 :(得分:0)
from_seconds也要转换回来
CREATE OR REPLACE FUNCTION from_seconds(t integer) RETURNS time AS $BODY$ DECLARE h INTEGER; m INTEGER; s INTEGER; rv TIME; BEGIN SELECT t / 3600 INTO h; SELECT t % 3600 / 60 INTO m; SELECT t % 60 INTO s; SELECT (h::text || ':' || m::text || ':' || s::text)::time INTO rv; RETURN rv; END; $BODY$ LANGUAGE 'plpgsql';