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 時間制が切り捨てられます (これは、正午より前の時間のみオラクル バージョンを模倣します)。

近い将来、この種の修正を含める希望はありますか?

私は自分で修正をプッシュしますが、「stackoverflow h2 タグ」が唯一の「サポート」リンクだったので、そこに問題を報告しています。

それまでの間 (修正が利用可能になるのを待っている間)、置き換えることは可能ですか (たとえば、既存のエイリアスを削除して別の実装に置き換えることによって)?

4

1 に答える 1

1

H2 Web サイトでは、「サポート」の下に 3 つのリンクがあります: StackOverflowGoogle Group EnglishおよびJapanese。バグ レポートについては、Google グループを使用するのが理にかなっています。

タイムスタンプを切り捨てる機能は比較的新しいものです。あなたが見つけたバグはすでに他の誰かによって発見されており、トランクで修正されています。必要に応じて、H2 を自分でダウンロードしてビルドすることで試すことができます。

于 2013-06-26T15:40:12.097 に答える