H2 TRUNC功能缺陷

时间:2013-06-26 14:27:11

标签: sql h2

从版本1.3.172开始,有一个TRUNC函数,它应该模仿Oracle的TRUNC(TIMESTAMP)。实施方面存在一些问题。查询:

select TRUNC(TIMESTAMP '2000-02-04 11:13:14') from dual;

按预期返回“2000-02-04 00:00:00”,但是:

select TRUNC(TIMESTAMP '2000-02-04 15:13:14') from dual;

返回“2000-02-04 12:00:00”,这是错误的。

原因是错误的实现(从Function.java的第1031行开始),我们看到:

case TRUNCATE: {
    if (v0.getType() == Value.TIMESTAMP) {
        java.sql.Timestamp d = v0.getTimestamp();
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.HOUR, 0);
        c.set(Calendar.MINUTE, 0);

c.set(Calendar.HOUR, 0)应替换为c.set(Calendar.HOUR_OF_DAY, 0) ---否则会截断12小时制(仅在中午之前模仿oracle版本)。

在不久的将来有没有希望包含这种修复方法?

我自己推动修复,但我'stackoverflow h2标签'是我能找到的唯一'支持'链接,所以这就是我报告问题的地方。

与此同时(当我等待修复程序变得可访问时),是否可以替换(例如,删除现有别名并将其替换为不同的实现)?

1 个答案:

答案 0 :(得分:1)

H2 web site中,“支持”下有3个链接:StackOverflowGoogle Group EnglishJapanese。对于错误报告,使用Google Group是有意义的。

截断时间戳的功能相对较新。你发现的错误已被其他人发现并固定在行李箱中。如果您愿意,可以通过下载并自行构建H2来试用它。