Sql 通过从其他列添加值来更新时间戳列

Sql 通过从其他列添加值来更新时间戳列,sql,postgresql,Sql,Postgresql,情景: 我们有一张桌子: 已玩游戏(id、开始、游戏持续时间) 在UI中,我们显示id、开始时间和完成时间。(早期完成时间通过添加starttime+游戏持续时间计算) (开始和结束时间是postgres中的timestmap。游戏类型为:integer,显示秒数) 现在由于需求的变化,我们正在添加另一列:FINISH_TIME。 对于较旧的数据,我们希望更新现有表以在完成时间填充值 所以我们一直在努力 如果我这样写: Select start, start+ INTERVAL 60 SECO

情景:

我们有一张桌子:

已玩游戏(id、开始、游戏持续时间)

在UI中,我们显示id、开始时间和完成时间。(早期完成时间通过添加starttime+游戏持续时间计算)


(开始和结束时间是postgres中的timestmap。游戏类型为:integer,显示秒数)

现在由于需求的变化,我们正在添加另一列:FINISH_TIME。 对于较旧的数据,我们希望更新现有表以在完成时间填充值

所以我们一直在努力

如果我这样写:

Select start,  start+ INTERVAL 60 SECONDS as end 
from GAME_PLAYED as FINISH_TIME  
where id = 123
这很有效

如果我写

Select start, start + INTERVAL (
    SELECT game_duration 
    from GAME_PLAYED  
    where id = 123) AS FINISH_TIME 
from GAME_PLAYED  
where id = 123
查询不起作用。 谁能告诉我遗漏了什么或我做错了什么吗?

试试这个:

 SELECT
     start, 
     start + game_duration * INTERVAL '1 SECONDS' AS finish_time 
 FROM "GAME_PLAYED" WHERE id = 123;
顺便说一句:如果要计算同一行中具有持续时间的行的完成时间,则无需执行子查询。

我找到了解决方案:

我正在尝试这样的东西

Select start,  start+ INTERVAL '1 SECONDS'* duration 
from GAME_PLAYED as FINISH_TIME  
where id = 123
秒是一天的1/(60*60*24)

Select start,  start +  game_duration / (60*60*24) as end 
from GAME_PLAYED as FINISH_TIME  
where id = 123

游戏持续时间的数据类型是什么?游戏持续时间的类型是:整数,它显示秒数。“不工作”的确切含义是什么?哦,任何想使用保留字“begin”作为列namd的人都应该被解雇。所以这可能就是问题所在。根据timestamp+integer没有定义的行为,您正在尝试将integer转换为interval,这可能在框中不受支持…如何
选择start,(start+interval(游戏持续时间))作为id=123的游戏的结束时间?