从版本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标签'是我能找到的唯一'支持'链接,所以这就是我报告问题的地方。
与此同时(当我等待修复程序变得可访问时),是否可以替换(例如,删除现有别名并将其替换为不同的实现)?
答案 0 :(得分:1)
在H2 web site中,“支持”下有3个链接:StackOverflow,Google Group English和Japanese。对于错误报告,使用Google Group是有意义的。
截断时间戳的功能相对较新。你发现的错误已被其他人发现并固定在行李箱中。如果您愿意,可以通过下载并自行构建H2来试用它。