私が持っているREPORTDATE
データベース(中列DATETIME
)タイプを。DATE
DATETIMEから値のみを抽出してから、COUNT
毎日実行し、WHERE
特定の日付より後の日付のみを制限する句を配置したいと思います。
だから私はこの節を持っています:
SELECT to_char(REPORTDATE, 'DD.MM.YYYY') AS MY, COUNT(*) from INCIDENT
where to_char(REPORTDATE, 'DD.MM.YYYY')>'09.11.2013'
GROUP BY to_char(REPORTDATE, 'DD.MM.YYYY')
結果は返されますが、:などの間違った結果に気付く30.10.2013
ことがあります。これは間違った結果です。
これを解決する方法は?
WHERE to_char(REPORTDATE、 'DD.MM.YYYY')> '09 .11.2013 '
2つの文字列を比較しています。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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加