在PostgreSQL中将时间转换为秒
我想将时间值04:30:25转换为秒。 是否有专门的功能来执行此操作 我知道我们可以提取小时、分钟和秒,然后计算秒数在PostgreSQL中将时间转换为秒,postgresql,Postgresql,我想将时间值04:30:25转换为秒。 是否有专门的功能来执行此操作 我知道我们可以提取小时、分钟和秒,然后计算秒数 SELECT EXTRACT(hour FROM t)*60*60 + EXTRACT(minutes FROM t)*60 + EXTRACT(seconds FROM t) FROM test; 但是我需要其他方法…您是否尝试过使用: SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25'); 如果这不
SELECT EXTRACT(hour FROM t)*60*60
+ EXTRACT(minutes FROM t)*60
+ EXTRACT(seconds FROM t)
FROM test;
但是我需要其他方法…您是否尝试过使用:
SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25');
如果这不起作用,您可以尝试在时间值前面加上“1970-01-01”,然后尝试:
SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01 04:30:25');
没有测试,但似乎这些是你唯一的选择。可能。也许您可以将其作为一项功能(只是一个快速设置,请查看并根据需要进行更改) 然后在查询中使用它:
SELECT to_seconds('04:30:25');
返回:
16225
您可以跳过历元或间隔,即:
SELECT EXTRACT(EPOCH FROM column ) from table
如果您想模拟MySQL的
time\u 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
功能。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';
从_秒(t整数)创建或替换函数
将时间返回为
$BODY$
声明
h整数;
m整数;
s整数;
rv时间;
开始
选择t/3600进入h;
选择t%3600/60到m;
选择t%60到s;
选择(h::text | | |':'| | m::text | |':'| | s::text)::进入rv的时间;
返回rv;
结束;
$BODY$
语言“plpgsql”;
作为@hdiogenes解决方案的简化方法,只需在查询中使用:
SELECT EXTRACT (EPOCH FROM '04:30:25'::time)
我使用了
FLOOR(EXTRACT(EPOCH FROM column))
四舍五入并得到一个整数。这并没有回答问题,而是相反的问题。我相信如果间隔时间超过24小时,这可能会中断。
SELECT EXTRACT (EPOCH FROM '04:30:25'::time)