バージョン 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 時間制が切り捨てられます (これは、正午より前の時間のみオラクル バージョンを模倣します)。
近い将来、この種の修正を含める希望はありますか?
私は自分で修正をプッシュしますが、「stackoverflow h2 タグ」が唯一の「サポート」リンクだったので、そこに問題を報告しています。
それまでの間 (修正が利用可能になるのを待っている間)、置き換えることは可能ですか (たとえば、既存のエイリアスを削除して別の実装に置き換えることによって)?