2017-01-26 130 views
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

感謝

回答

1

嘗試此查詢:

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

+0

這似乎不工作FROM_UNIXTIME結果爲空值。 TO_SECONDS的作品,但FROM_UNIXTIME將其設置爲NULL ..任何想法?謝謝 –

+0

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)返回一個值.. –

+0

'MICROSECOND('2015-12-11 12:31:04.080000')'給你什麼? –