从版本 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 标签”是我能找到的唯一“支持”链接,所以这就是我报告问题的地方。
与此同时(当我等待修复变得可访问时),是否可以替换(例如,通过删除现有别名并用不同的实现替换它)?