sql >> データベース >  >> RDS >> Oracle

DATEのOracleSQL比較は間違った結果を返します

    2つの文字列を比較しています 。 日付を比較する必要があります s。ここで他の回答ですでに述べたように、DATEの計算では日付をそのままにしておく必要があります。 TO_CHAR は表示用で、 TO_DATE 文字列リテラルをDATEに変換することです。

    SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
      COUNT(*)
    FROM TABLE
    WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
    GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY') 
    

    また、REPORTDATEはDATE列であるため、datetime要素が含まれます。したがって、比較中に時間要素を除外する場合は、 TRUNCを使用する必要があります。

    WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')
    

    ただし、 TRUNCを適用する 日付の 通常のインデックスを抑制します その列に。パフォーマンスの観点から、日付範囲条件を使用することをお勧めします 。

    たとえば、

    WHERE REPORTDATE
    BETWEEN 
            TO_DATE('09.11.2013', 'DD.MM.YYYY')
    AND     
            TO_DATE('09.11.2013', 'DD.MM.YYYY') +1
    


    1. PostgresでのExplainAnalyzeの結果の解釈

    2. JavaのORACLE関数MONTHS_BETWEENのアナログ

    3. Spring Jdbctemplate.update(String sql、obj ... args)を使用して挿入されたIDを取得する方法

    4. PostgreSQL拡張機能であるpgFincore1.2