mysql获取日变化的平均时间

9rygscc1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(332)

考虑使用以下两个时间戳

"2018-07-12 23:50:00","2018-07-14 00:30:00"

我想找到平均值 time 他们两个。
结果应该是 00:10:00 作为一个时代(我对最后的实际日期不感兴趣,只对时间感兴趣)。
我首先比较哪一个比较早(连续时间流),但失败了。如果我用日期来比较 23:50:00 (无论哪个时间)总是更早,因为它也考虑了日期。如果我用时间来比较 00:30 总是更早,因为它只考虑时间本身。
稍后我需要一个有两个时间戳的触发器。当前存储的一个( OLD )以及最新的( NEW )计算新的平均时间。
如有任何建议,我们将不胜感激

nwlls2ji

nwlls2ji1#

当你取两个的平均值时 DATETIME 实际计算的值 DATETIME 两个输入值之间的中点处的值。
这里有一个方法来计算2的平均值 DATETIME 价值观。

SELECT FROM_UNIXTIME((UNIX_TIMESTAMP('2018-07-12 23:50:00')+UNIX_TIMESTAMP("2018-07-14 00:30:00"))2)

这是因为unix时间戳实际上是自历史上某个特定时间以来的秒数。它们是数字量,你可以用它们做算术运算。
那么,如果你只想要平均时间的一部分,你可以使用 TIME() 功能。
但是,看起来你实际上并不想要2的数字平均值 DATETIME 价值观;你的例子是24小时20米的距离。看起来您想要的是时间的平均值,就好像较早的datetime在较晚的datetime的前一天一样。
你可以这样计算:

SET @startSec := TiME_TO_SEC(TIME('2018-07-12 23:50:00'));
SET @endSec := TiME_TO_SEC(TIME('2018-07-14 00:30:00'));
SET @endSec = IF(@startSec > @endSec, @endSec + TIME_TO_SEC('24:00:00'), @endSec);
SET @deltaSec := ((@startSec + @endSec) /2) MOD TIME_TO_SEC('24:00:00') ;
SELECT SEC_TO_TIME(@deltaSec);

处理假象的诀窍是 IF() 函数调用。
这对于用sql编写来说是一个很大的困难,因此创建一个存储函数来处理它可能是有意义的。

相关问题