我正在将某些东西从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。
答案 0 :(得分:6)
从另一个中减去一个除以2并将其添加到开始时间:
time
您可以分割endtime - begintime
值是正确的。但time
的结果不是interval
而是time
。你可以将间隔除以2。
上述表达式适用于timestamp
,interval
或Hello {FullName}<br /><br/>. Your username is {Username}.
列。