web-dev-qa-db-ja.com

タイムスタンプへのH2データベース文字列

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の後、ミリ秒がゼロであることがわかります。

ソリューションとは何ですか?

27
shprotova

私のテストによると、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を使用するため、同じ制限に耐えなければなりません。 SimpleDateFormat内で解決策を見つけた場合、H2のparsedatetime関数内で使用できます。

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

INSERT INTO TEST VALUES(2, {ts '2012-09-17 18:47:52.69'});
39
Thomas Mueller