36

H2 データベースへのタイムスタンプの挿入

こんにちは、「17-09-2012 18:47:52.69」のようなデータを挿入する必要があります。関数 PARSEDATETIME はミリ秒をカットします。クエリの例:

CREATE TABLE TEST(ID NUMBER(19) not null,
DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

INSERT INTO TEST (ID, DATE) VALUES(1,
parsedatetime('17-09-2012 18:47:52.69', 'dd-MM-yyyy hh:mm:ss.SS'))

SELECT の後、ミリ秒がゼロであることがわかります。

解決策とは?

4

1 に答える 1

52

私のテストによると、H2 バージョン 1.3.170 では、ミリ秒は実際にはゼロではなく、069 です。

select * from test;
ID  DATE  
1   2012-09-17 18:47:52.069

次を実行しても同じことが起こります。

call parsedatetime('17-09-2012 18:47:52.69', 'dd-MM-yyyy hh:mm:ss.SS');

ゼロを追加すると、次のように機能します。

call parsedatetime('17-09-2012 18:47:52.690', 'dd-MM-yyyy hh:mm:ss.SS');

H2 は内部的に を使用するjava.text.SimpleDateFormatため、同じ制限に耐えなければなりません。内で解決策が見つかった場合は、H2SimpleDateFormatの関数内で使用できます。parsedatetime

別の方法は、JDBC で定義されている ISO タイムスタンプ形式を使用することです。これは、JDBC 標準に準拠するすべてのデータベースで動作するはずです。

INSERT INTO TEST VALUES(2, {ts '2012-09-17 18:47:52.69'});
于 2013-01-04T06:45:52.680 に答える