减去postgresql表中的列

Dav*_*nes 4 sql postgresql datetime

我有一个包含四列 ID、中断名称、开始时间、完成时间的表。

开始时间和结束时间的数据集是没有时区的时间。

我想添加另一个名为 Duration 的列,并希望它减去时间开始时完成的时间。这样,在持续时间列中输入的数据的每一行都会显示中断的时间。

Mur*_*nik 6

减去两个时间戳将返回interval它们之间的差异,这应该符合您的要求:

SELECT *, time_finished - time_Started AS duration
FROM   mytable
Run Code Online (Sandbox Code Playgroud)

  • @DavidBJones 我试图说明(并且可能做得不够好)您不需要添加列 - 当您查询表时,您始终可以即时计算持续时间。 (2认同)

bfr*_*ris 6

正如@Mureinik 所指出的,您可以对查询中的时间戳进行数学计算。要修复您的表,您需要向表中添加持续时间(或您喜欢的任何名称)列,并使用 UPDATE 查询填充该列。

首先,我将创建一个沙箱表来测试这些更改。当您对结果感到满意时,您可以修改实际的表。

复制从mytable到 的所有内容test

CREATE TABLE test
AS
SELECT * 
FROM mytable
Run Code Online (Sandbox Code Playgroud)

添加数据类型为间隔的新列

ALTER TABLE test
ADD COLUMN duration interval
Run Code Online (Sandbox Code Playgroud)

填充新列

UPDATE test
SET duration = time_finished - time_started
Run Code Online (Sandbox Code Playgroud)

对表中的结果感到满意后test,请在实时表上运行相同的命令。