我正在将一些东西从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.
只需从另一个中减去一个除以2并将其添加到begintime:
begintime + (endtime - begintime)/2
你不能time
分值是正确的.但结果endtime - begintime
不是一个time
而是一个interval
.你可以将间隔除以2.
上述表达式可与time
,timestamp
或interval
列.