我有如下hibernate映射:
<property formula="(Timediff(ifnull(sttime,now()),sstime))" insert="false" name="duration" update="false" />
where sstime is of type Timestamp
在这里,这个公式从我的数据中返回一些格式为"838:59:59“的值。
当我试图在'Duration‘字段中加载这个值时,我得到了异常,它有'java.sql.Time’类型,它给了我这个异常。
"Generic JDBC exception - Bad format for Time '838:59:59'"
发布于 2013-03-12 19:31:43
这确实不是一个有效的时间。您不应该使用java.sql.Time来表示持续时间,特别是当此持续时间可能超过24小时时,因为时间表示日期的时间部分。请改用自定义类型,或仅使用您将自己解析的字符串。
发布于 2013-03-12 19:32:05
从源头开始
http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/
在公式中使用TIMESTAMPDIFF代替TIMEDIFF
发布于 2013-03-12 19:45:19
遵循MySQL文档,您应该使用TIMESTAMPDIFF()和UNIX_TIMESTAMP():
由TIMEDIFF()返回的结果被限制在时间值允许的范围内。或者,您可以使用函数TIMESTAMPDIFF()和UNIX_TIMESTAMP(),这两个函数都返回整数。
查询可能如下所示,但依赖于您正在使用的结果数据类型:
SELECT FROM_UNIXTIME(TIMESTAMPDIFF(SECOND,sstime,NOW())) FROM time_table;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(sstime)) FROM time_table;
Demo
https://stackoverflow.com/questions/15359595
复制相似问题