Truncated incorrect time value

mysql 计算两个时间 相差  多少小时,多少分钟,多少秒
格式化成   HH:MM:ss

原因: TIMEDIFF,TIME_FORMAT 极限值 溢出

来看看错误


Data truncation: Truncated incorrect time value: '860:19:15.000000';


一般数据可以使用
TIMEDIFF,  TIME_FORMAT
 (CASE WHEN LENGTH(soi.fsOrderTime)=0 OR LENGTH(soi.fsBacktime)=0 OR LENGTH(soi.fsCreateTime)=0 THEN NULL ELSE TIME_FORMAT(TIMEDIFF(soi.fsBacktime,soi.fsCreateTime),'%T') END) AS fs_take_time


如果计算的两个时间差 超过 30天左右
使用 TIMESTAMPDIFF

由于  TIME_FORMAT 也有极限值,所以不能使用这个函数了
只能自己干
%60
CONCAT(
        IF(
        (
        TIMESTAMPDIFF(
        HOUR,
        soi.fsCreateTime,
        soi.fsBacktime
        ) < 10
        ),
        CONCAT(
        '0',TIMESTAMPDIFF(
        HOUR,
        soi.fsCreateTime,
        soi.fsBacktime
        )
        ),
        (
        TIMESTAMPDIFF(
        HOUR,
        soi.fsCreateTime,
        soi.fsBacktime
        )
        )
        ),
        ':',
        IF(
        (
        TIMESTAMPDIFF(
        MINUTE,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60 < 10
        ),
        CONCAT(
        '0',TIMESTAMPDIFF(
        MINUTE,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60
        ),
        (
        TIMESTAMPDIFF(
        MINUTE,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60
        )
        ),
        ':',
        IF(
        (
        TIMESTAMPDIFF(
        SECOND,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60 < 10
        ),
        CONCAT(
        '0' ,TIMESTAMPDIFF(
        SECOND,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60
        ),
        (
        TIMESTAMPDIFF(
        SECOND,
        soi.fsCreateTime,
        soi.fsBacktime
        ) % 60
        )
        )
        )
        END
        ) AS fs_take_time,


再来看看 TIMEDIFF,  TIME_FORMAT 极限值   838:59:59
  SELECT TIME_FORMAT(TIMEDIFF('2017-08-16 14:22:32','2017-07-11 18:03:17'),'%T')



这两个是时间 正确相差
'2017-08-16 14:22:32','2017-07-11 18:03:17'
这么多小时 分钟 秒数
860:19:15




猜你喜欢

转载自takeme.iteye.com/blog/2390098
今日推荐