gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:29:50 26 4
gpt4 key购买 nike

我正在将一些东西从 SQL Server 转换到 PostgreSQL。有一张 table BeginTime 和 EndTime 之间的计算字段称为 MidTime。时间是从视频剪辑的开头偏移的,并且永远不会超过大约 6 分钟。在 SQL Server 中,BeginTime、EndTime 和 MidTime 都是 TimeSpans。您可以将其用作函数:

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

这是将两个时间跨度(以毫秒为单位)的差异除以 2,然后将其添加到 BeginTime。 super 简单。结果如下所示:

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 存储为“没有时区的时间”time(6) 值,它们在数据库中看起来是正确的。我可以将它们彼此相减,但我无法将以毫秒为单位的值减半(不允许进行时间划分),而且没有明显的方法可以将毫秒数加回 BeginTime。

我查看了 EXTRACT,当您要求毫秒时,它会为您提供秒和毫秒的值,但只是那部分时间。我似乎无法表示可以减去、除以然后将结果加回另一个时间的时间。

我正在使用 Postgres 9.4,我没有看到任何简单的方法可以在不将日期分解为组成部分并获得整体毫秒数的情况下执行此操作(看起来它可以工作,但我不想做这么丑陋的事情如果我不需要),或者将所有内容转换为 unix 日期时间,然后进行计算,然后如何将其恢复为“没有时区的时间”并不明显。

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

最佳答案

只需从另一个中减去一个除以二,然后将其添加到开始时间:

begintime + (endtime - begintime)/2

不能分割时间值是正确的。但是 endtime - begintime 的结果不是 time 而是 interval。您可以将一个区间除以 2。

以上表达式适用于 timetimestampinterval 列。

关于sql-server - PostgreSQL 找到两个时间戳之间的中点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com