2013-04-17 36 views
1

我與一些舊錶工作,代表時間,這樣的十進制representating時間:MySQL的轉換傳統小數毫秒

74447.548 = 7:44:47.548 

我提出這個到時候被存儲爲(INT)毫秒的表。我想爲此轉換創建一個函數..下面的工作,但是有沒有更有效的方法?

CREATE FUNCTION `test`.`decimalToMilli` (bigTime decimal) 
RETURNS INTEGER 
BEGIN 
return (floor(mod(bigTime,floor(bigTime))*1000) -- milliseconds 
    + (floor(bigTime) MOD 100) * 1000 -- seconds 
    + ((((floor(bigTime) - floor(bigTime) MOD 100) MOD 10000))/100) * 1000*60 -- minutes 
    + ((((floor(bigTime) - floor(bigTime) MOD 10000) MOD 1000000))/10000) * 1000*60*60 --hrs 
); 
END 

建議更好的方法?

回答

2

這是怎麼回事?

CREATE FUNCTION `test`.`decimalToMilli` (bigTime decimal) 
RETURNS INTEGER 
BEGIN 
    return ((bigTime * 1000) MOD 100000 -- seconds and milliseconds 
     + (floor(bigTime/100) MOD 100) * 60000 --minutes 
     + (floor(bigTime/10000)) * 3600000 -- hours 
     ); 
END 
+0

謝謝 - 但我剛剛在我的測試中發現,您的和我的例程都將毫秒數轉到最近的秒數?!? – JJeff

+0

值2032.808作爲1233000而不是1232808插入到我的表中 - 我在觸發器中使用它作爲raw_time = decimalToMilli(NEW.CumulativeTime), – JJeff

+0

啊 - 它是在bigTime的聲明中...它應該是(bigTime decimal(12,6)) – JJeff