我有hibernate映射如下:
<property formula="(Timediff(ifnull(sttime,now()),sstime))" insert="false" name="duration" update="false" />
where sstime is of type Timestamp
此处此公式从我的数据中以“838:59:59”格式返回一些值。
当我尝试在“持续时间”字段中加载此值时出现异常,该字段具有“java.sql.Time”类型,它为我提供了此异常。
"Generic JDBC exception - Bad format for Time '838:59:59'"
答案 0 :(得分:3)
这确实不是一个有效的时间。您不应该使用java.sql.Time来表示持续时间,特别是如果此持续时间可能超过24小时,因为时间表示日期的时间部分。请改为使用自定义类型,或者只是您自己解析的字符串。
答案 1 :(得分:1)
来自消息来源
http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/
在公式中使用TIMESTAMPDIFF而不是TIMEDIFF
答案 2 :(得分:1)
遵循MySQL文档,您应该使用TIMESTAMPDIFF()和UNIX_TIMESTAMP():
TIMEDIFF()返回的结果仅限于允许的范围 TIME值。或者,您可以使用任一功能 TIMESTAMPDIFF()和UNIX_TIMESTAMP(),它们都返回整数。
查询可能看起来像这样,但取决于您使用的结果数据类型:
SELECT FROM_UNIXTIME(TIMESTAMPDIFF(SECOND,sstime,NOW())) FROM time_table;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(sstime)) FROM time_table;