5

我有如下的休眠映射:

<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'"
4

3 回答 3

3

这确实不是一个有效的时间。您不应该使用 java.sql.Time 来表示持续时间,特别是如果此持续时间可能超过 24 小时,因为 Time 表示日期的时间部分。请改用自定义类型,或者仅使用您自己解析的字符串。

于 2013-03-12T11:31:43.263 回答
1

从源头

http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/

在公式中使用 TIMESTAMPDIFF 而不是 TIMEDIFF

于 2013-03-12T11:32:05.153 回答
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;

演示

于 2013-03-12T11:45:18.697 回答