当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL找到两个时间戳之间的中点

如何解决《PostgreSQL找到两个时间戳之间的中点》经验,为你挑选了1个好方法。

我正在将一些东西从SQL Server转换为PostgreSQL.在BeginTime和EndTime之间有一个计算字段的表,称为MidTime.时间是从视频剪辑的开头偏移,并且永远不会超过大约6分钟.在SQL Server中,BeginTime,EndTime和MidTime都是TimeSpans.你可以使用它作为功能:

DATEADD(ms, DATEDIFF(ms,BeginTime, EndTime)/2, BeginTime)

这取两个时间跨度的差异,以毫秒为单位,除以2,然后将其添加到BeginTime.超级直截了当.结果如下所示:

ID  BeginTime   EndTime MidTime
10137   00:00:05.0000000    00:00:07.0000000    00:00:06.0000000
10138   00:00:08.5000000    00:00:09.6660000    00:00:09.0830000
10139   00:00:12.1660000    00:00:13.4000000    00:00:12.7830000
10140   00:00:14.6000000    00:00:15.7660000    00:00:15.1830000
10141   00:00:17.1330000    00:00:18.3000000    00:00:17.7160000
10142   00:00:19.3330000    00:00:21.5000000    00:00:20.4160000
10143   00:00:23.4000000    00:00:25.4000000    00:00:24.4000000
10144   00:00:25.4330000    00:00:26.8330000    00:00:26.1330000

我看过PostgreSQL中可用的所有不同的东西,看不到这样的东西.我将BeginTime和EndTime存储为"没有时区的时间"时间(6)值,并且它们在数据库中看起来正确.我可以相互减去这些,但我不能得到以毫秒为单位的值减半(不允许分割次数),然后没有明显的方法将毫秒添加回BeginTime.

我看过EXTRACT,当你要求毫秒时,你会得到第二和毫秒的值,但只是那部分时间.我似乎无法表示我可以减去,除法,然后将结果添加回另一个时间的时间.

我正在使用Postgres 9.4而且我没有看到任何简单的方法这样做而不会将日期分成组件并获得整体毫秒(看起来它会起作用但我不想做这么难看的事情,如果我不做不需要),或者将所有内容转换为unix日期时间然后进行计算,然后如何将其恢复到"没有时区的时间"并不明显.

我希望有一些我只是缺少的优雅东西?或者更好的方法来存储这些工作更容易?我只对时间部分感兴趣所以时间(6)似乎最接近Sql Server的TimeSpan.



1> a_horse_with..:

只需从另一个中减去一个除以2并将其添加到begintime:

begintime + (endtime - begintime)/2

你不能time分值是正确的.但结果endtime - begintime不是一个time而是一个interval.你可以将间隔除以2.

上述表达式可与time,timestampinterval列.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有