1. 程式人生 > >mysql函式 秒轉換成時分秒

mysql函式 秒轉換成時分秒

方法一:

CREATE DEFINER=`root`@`%` FUNCTION `timeDifference`(Dirty VARCHAR ( 500 )) RETURNS text CHARSET utf8
    DETERMINISTIC
BEGIN
IF Dirty<0 THEN
SET Dirty= TRIM(LEADING '-' FROM Dirty);
SET Dirty = CONCAT('-',
cast( FLOOR(Dirty / 86400)*24+(Dirty % 86400 / 3600)  AS signed INTEGER ),
'時',
cast( Dirty % 86400 % 3600 / 60 AS signed INTEGER ),
'分',
cast( Dirty % 86400 % 3600 % 60 AS signed INTEGER ),
'秒' 
);
ELSE
SET Dirty = CONCAT(
cast( FLOOR(Dirty / 86400)*24+(Dirty % 86400 / 3600)  AS signed INTEGER ),
'時',
cast( Dirty % 86400 % 3600 / 60 AS signed INTEGER ),
'分',
cast( Dirty % 86400 % 3600 % 60 AS signed INTEGER ),
'秒' 
);
END IF;
RETURN Dirty;

END

注:這種計算有問題9728秒時,轉換成時分秒有一小時誤差。別的沒發現問題!應該是小數點後面死迴圈的原因,有大神發現其他原因請留言。

方法二:

CREATE DEFINER=`root`@`localhost` FUNCTION `timeDifference`(Dirty VARCHAR ( 500 )) RETURNS text CHARSET utf8
    DETERMINISTIC
BEGIN
DECLARE a integer(10);
DECLARE b integer(10);
DECLARE c integer(10);
DECLARE d integer(10);
DECLARE e integer(10);
DECLARE f integer(10);
DECLARE timeDif VARCHAR ( 500 );
set a=0;
set d=0;
set f=0;
IF Dirty<0 THEN
SET timeDif= TRIM(LEADING '-' FROM Dirty);
ELSE
SET timeDif=Dirty;
END IF;
     set a =cast( timeDif  % 60 AS signed INTEGER ) ;#秒
   set b =timeDif-a;#時間差
     IF b > 0 THEN
    set c=cast( b / 60 AS signed INTEGER );
    set d=cast( c % 60 AS signed INTEGER );#分
    set e=c-d;    
END IF;
IF e > 0 THEN
    set f = cast( e / 60 AS signed INTEGER );#時
END IF;
IF Dirty < 0 THEN
    set Dirty=CONCAT('-',f,'時',d,'分',a,'秒');
ELSE
set Dirty=CONCAT(f,'時',d,'分',a,'秒');
END IF;
RETURN Dirty;

END

這種計算目前沒發現問題。有更好的請留言。