我有一个时间值04:30:25,我想将其转换为秒。 有没有专门的功能来做到这一点?在PostgreSQL中将时间转换为秒数
我知道我们可以提取小时,分钟和秒,然后计算秒。
SELECT EXTRACT(hour FROM t)*60*60
+ EXTRACT(minutes FROM t)*60
+ EXTRACT(seconds FROM t)
FROM test;
但我想一些其他的办法......
我有一个时间值04:30:25,我想将其转换为秒。 有没有专门的功能来做到这一点?在PostgreSQL中将时间转换为秒数
我知道我们可以提取小时,分钟和秒,然后计算秒。
SELECT EXTRACT(hour FROM t)*60*60
+ EXTRACT(minutes FROM t)*60
+ EXTRACT(seconds FROM t)
FROM test;
但我想一些其他的办法......
也许你可以使它成为一个功能(只需快速设置,请根据需要查看和更改)?
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
您是否尝试过使用:
SELECT EXTRACT(EPOCH FROM INTERVAL '04:30:25');
如果不工作,你可以尝试使用前缀“你的时间价值1970- 01-01'并尝试:
SELECT EXTRACT(EPOCH FROM TIMESTAMP '1970-01-01 04:30:25');
未测试,但它似乎这些是你唯一的选择。大概。
您可以跳过时期或时间间隔,即模仿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
函数接受的答案。
:
16225
我用'FLOOR(EXTRACT(EPOCH FROM column))'来取整并得到一个整数 – Josh 2016-09-12 20:45:56