1
在mysql中将微秒舍入到毫秒的最佳方式是什么?将微秒舍入到毫秒MySQL
例如,在日期时间(6)列,我们如何圆
2016年12月1日12:30:01.122456至2016年12月1日12:30:01.122
和
2016年12月1日12:30:01.122501至2016年12月1日12:30:01.123
感谢
在mysql中将微秒舍入到毫秒的最佳方式是什么?将微秒舍入到毫秒MySQL
例如,在日期时间(6)列,我们如何圆
2016年12月1日12:30:01.122456至2016年12月1日12:30:01.122
和
2016年12月1日12:30:01.122501至2016年12月1日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
。
这似乎不工作FROM_UNIXTIME结果为空值。 TO_SECONDS的作品,但FROM_UNIXTIME将其设置为NULL ..任何想法?谢谢 –
SELECT FROM_UNIXTIME(TO_SECONDS('2015-12-11 12:31:04.080000')+ (ROUND(MICROSECOND('2015-12-11 12:31:04.080000')/ 1000,0)/ 1000))AS new_dt导致空值,但是如下:select TO_SECONDS('2015-12-11 12:31:04.080000')+ (ROUND(MICROSECOND('2015-12-11 12:31:04.080000')/ 1000, 0)/ 1000)返回一个值.. –
'MICROSECOND('2015-12-11 12:31:04.080000')'给你什么? –