5

私は次のように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'タイプの'Duration'フィールドにこの値を読み込もうとすると、例外が発生しました。この例外が発生します。

"Generic JDBC exception - Bad format for Time '838:59:59'"
4

3 に答える 3

3

それは確かに有効な時間ではありません。Time は日付の時間部分を表すため、java.sql.Time を使用して期間を表すことはできません。特に、この期間が 24 時間を超える可能性がある場合は注意が必要です。代わりにカスタム型を使用するか、単に自分で解析する文字列を使用してください。

于 2013-03-12T11:31:43.263 に答える
1

ソースから

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

数式でTIMEDIFFの代わりにTIMESTAMPDIFFを使用する

于 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 に答える