将微秒四舍五入为毫秒 MySQL

Rounding Microseconds to Milliseconds MySQL

在 mysql 中将微秒四舍五入到毫秒的最佳方法是什么?

例如,在 datetime(6) 列中,我们如何舍入

2016-12-01 12:30:01.122456 至 2016-12-01 12:30:01.122

2016-12-01 12:30:01.122501 至 2016-12-01 12:30:01.123

谢谢

试试这个查询:

SELECT FROM_UNIXTIME(TO_SECONDS(dt) -
                     TO_SECONDS('1970-01-01 00:00:00') +
                     (ROUND(MICROSECOND(dt) / 1000, 0) / 1000)) AS new_dt
FROM yourTable

这里 dt 是您的 datetime 专栏。为了便于解释,我将使用 2016-12-01 12:30:01.122456 作为示例分解上述查询。

MICROSECOND(dt) = 122456
ROUND(MICROSECOND(dt) / 1000, 0) = 122

然后

(ROUND(MICROSECOND(dt) / 1000, 0) / 1000)) = 0.122

因此 0.122 是您 datetime 中的小数秒数,舍入后不包含微秒范围内的任何精度。

TO_SECONDS(dt) = # seconds EXCLUDING the fractional part

最后,我们用 dt 自第 0 年以来的秒数减去从第 0 年到纪元开始的秒数。这给我们留下了自纪元开始以来 dt 中的秒数。然后,我们将不包括小数部分的秒数与0.122相加,得到想要的新datetime的总秒数。最后,我们使用 FROM_UNIXTIME() 将此秒数转换回真正的 datetime.