3

从版本 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 标签”是我能找到的唯一“支持”链接,所以这就是我报告问题的地方。

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

4

1 回答 1

1

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

截断时间戳的功能相对较新。您发现的错误已被其他人发现并已在后备箱中修复。如果你愿意,你可以自己下载和构建 H2 来尝试一下。

于 2013-06-26T15:40:12.097 回答