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

这种计算目前没发现问题。有更好的请留言。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值