将微秒四舍五入为毫秒 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
.
在 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
.