Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中将时间转换为秒_Postgresql - Fatal编程技术网

在PostgreSQL中将时间转换为秒

在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'); 如果这不

我想将时间值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)