HSQLDB只是插入时的时间值

时间:2013-12-17 09:45:21

标签: hsqldb

我们正在使用HSQLDB for JUnits,我们的生产数据库是Oracle。

我有一个表,其中有一个字段(类型是Oracle中的时间戳),其中包含有关一天中某些重要时间的信息。

我想在脚本中为JUnit准备测试数据,但是我失败了。

我在Oracle DB中可以做的基本想法是

SYSDATE - TRUNC(SYSDATE)

当我在HSQLDB中尝试使用CURRENT_TIME时,我收到错误:

org.hsqldb.HsqlException: incompatible data type in conversion

我得到的下一个想法是为"空日期"添加时间,尝试:

DATE '0000-01-01'

但得到了

org.hsqldb.HsqlException: data exception: invalid datetime format

奇怪的是DATE '2013-01-01'它工作得很好,也许初始化零是问题...不,它们不是,DATE '0-01-01' ...

在这个阶段我已经有点生气了(想想我可以在Oracle中做一秒钟而且我在这里花了几个小时)。

documentation我试图找到一些能够创建所需结果的函数组合,但不幸的是我发现文档不清楚。对于第一次阅读似乎是这样,但是当我尝试时,我很惊讶为什么这样做

DATEADD( 'hour', 1, CURRENT_DATE )

工作正常,而

DATEADD( 'hour', 1, CURRENT_TIME)

结尾
org.hsqldb.HsqlException: incompatible data type in conversion

相反,DATE_ADD适用于两者,两个函数的参数类型在文档中相同: - /

我相信我能做到,比如

// 4x call of DATEADD, datetime not working as described above
date - years - months - days + seconds_from_midnight

但必须有一些简单易用的东西(我希望如此)。

HSQLDB版本:2.3.1

1 个答案:

答案 0 :(得分:2)

将此设置用于测试:

SET DATABASE SQL SYNTAX ORA TRUE

然后这个工作并返回一个INTERVAL

SYSDATE - TRUNC(SYSDATE)

更简单的形式是CAST (SYSDATE AS TIME)以返回SYSDATE的时间部分,您可以将其转换为间隔。

此日期DATE '0000-01-01'不被接受,因为没有YEAR 0.您需要使用DATE '0001-01-01'

这可以很好地将当天的时间转换为INTERVAL:

LOCALTIME - TIME'00:00:00'

注意LOCALTIME没有时区,而CURRENT_TIME有。