使用できる日付をハードコーディングするのではなく、常に昨日のデータが必要な場合:
WHERE LISTING_EOD.DBDATE >= TRUNC(SYSDATE) - 1
AND LISTING_EOD.DBDATE < TRUNC(SYSDATE)
TRUNC(SYSDATE)
今朝の真夜中を返すので、今日実行すると ~ の範囲に18-Oct-2010 00:00:00
なり18-Oct-2012 23:59:59
ます。
一般に、暗黙の日付形式マスクを使用することはお勧めできません。NLS_DATE_FORMAT
元のコードはが に設定されていると想定していますがDD-MON-YYYY
、現在は正しくない可能性があり (既存の選択で時間が表示されている場合は、おそらくそうではありません)、将来的にはそうではない可能性があります。TO_DATE('18-OCT-2012', 'DD-MON-YYY')
あいまいさや予期しない動作を避けるために、常に明示的な日付形式マスク ( など) を使用してください。
フィールドが実際にはaVARCHAR2
ではなくDATE
(これは悪いことです)、日付範囲を文字列に変換して一致させる必要があります。
WHERE LISTING_EOD.DBDATE >= TO_CHAR(TRUNC(SYSDATE) - INTERVAL '1' DAY, 'DD-MON-YYYY HH24:MI:SS')
AND LISTING_EOD.DBDATE <= TO_CHAR(TRUNC(SYSDATE) - INTERVAL '1' SECOND, 'DD-MON-YYYY HH24:MI:SS')
これは 1 日だけで機能しますが、日付範囲を探すのに問題があります。適切な型の列にデータを格納する方がはるかに安全です。