1

私は、時間を次のように表す小数として時間を表すいくつかのレガシーテーブルを使用しています。

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

より良い方法の提案はありますか?

4

1 に答える 1

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
于 2013-04-17T14:59:13.407 に答える