在PostgreSQL中将时间转换为秒

Pav*_*mar 14 postgresql

我有一个时间值04:30:25,我想转换为秒.有没有专门的功能来做这个?

我知道我们可以提取小时,分钟和秒,然后计算秒数.

SELECT EXTRACT(hour FROM t)*60*60
       + EXTRACT(minutes FROM t)*60
       + EXTRACT(seconds FROM t)
  FROM test; 
Run Code Online (Sandbox Code Playgroud)

但我想要其他一些方式......

zaf*_*zaf 35

你尝试过使用过:

SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25');
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以尝试使用'1970-01-01'为时间值添加前缀,并尝试:

SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01 04:30:25');
Run Code Online (Sandbox Code Playgroud)

没有测试,但似乎这些是你唯一的选择.大概.


Jor*_*Jor 14

您可以跳过纪元或间隔,即:

SELECT EXTRACT(EPOCH FROM column ) from table
Run Code Online (Sandbox Code Playgroud)

  • 我用`FLOOR(EXTRACT(EPOCH FROM column))`四舍五入并得到一个整数 (2认同)

Joh*_*n P 7

也许您可以使其功能(只需快速设置,请根据需要进行检查和更改)?

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';
Run Code Online (Sandbox Code Playgroud)

然后在查询中使用它:

SELECT to_seconds('04:30:25');
Run Code Online (Sandbox Code Playgroud)

返回值:

16225
Run Code Online (Sandbox Code Playgroud)