MySQL时间戳的平均值,现在以秒为单位


SELECT AVG(UNIX_TIMESTAMP(NOW()) - TIME_TO_SEC(TOTAL_TIME_START)) AS OrderAverage
FROM Orders
WHERE `TOTAL_TIME_STOP` = '0000-00-00 00:00:00'

我正在使用上面的查询来尝试给出订单在数据库中等待的平均时间。TOTAL_TIME_START将是MySQL时间戳字段(过去的时间)。但我得到的秒值等于18671天3小时30分钟,这是完全错误的。我哪里做错了?

问题是TIME_TO_SEC()UNIX_TIMESTAMP()正在做两件不同的事情。一个是计算datetime时间分量的秒数。另一个是计算自'1970-01-01'以来的秒数。

一个解决方案是简单地使用TO_SECONDS():
SELECT AVG(TO_SECONDS(NOW()) - TO_SECONDS(TOTAL_TIME_START)) AS OrderAverage
FROM Orders
WHERE `TOTAL_TIME_STOP` = '0000-00-00 00:00:00'

当您以epoch获取当前时间时,您也需要将TOTAL_TIME_START转换为unix时间戳:

SELECT AVG(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(TOTAL_TIME_START)) AS OrderAverage
FROM Orders
WHERE `TOTAL_TIME_STOP` = '0000-00-00 00:00:00'

最新更新