H2数据库字符串到时间戳

shp*_*ova 27 timestamp h2 milliseconds

在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'))
Run Code Online (Sandbox Code Playgroud)

在SELECT之后我看到毫秒是零.

什么是解决方案?

Tho*_*ler 41

根据我的测试,使用H2版本1.3.170,毫秒实际上不是零,而是069:

select * from test;
ID  DATE  
1   2012-09-17 18:47:52.069
Run Code Online (Sandbox Code Playgroud)

如果您运行同样的情况:

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

如果你添加零,那么它的工作原理:

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

H2内部使用java.text.SimpleDateFormat,因此它必须具有相同的限制.如果您在其中找到解决方案SimpleDateFormat,则可以parsedatetime在H2中的函数中使用它.

另一种方法是使用JDBC中定义的ISO时间戳格式.这应该适用于符合JDBC标准的所有数据库:

INSERT INTO TEST VALUES(2, {ts '2012-09-17 18:47:52.69'});
Run Code Online (Sandbox Code Playgroud)