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'