0

due_date今日の値を除外する簡単なクエリがあります。

SELECT *
  FROM ORDER
  WHERE DUE_DATE = CURRENT_DATE AND
        ROWNUM <= 10
  ORDER BY DUE_DATE ASC

ただし、今日のように期日がある注文がたくさんある場合でも、クエリは実際には0行を返します。

どうして?前もって感謝します。

申し訳ありませんが、DUE_DATE の型がDate

4

2 に答える 2

5

次のように、日付を切り捨てる必要があります。

SELECT *
  FROM ORDER
  WHERE TRUNC(DUE_DATE) = TRUNC(CURRENT_DATE) AND
        ROWNUM <= 10
  ORDER BY DUE_DATE ASC 

または、次のように範囲比較を使用します

SELECT *
  FROM ORDER
  WHERE DUE_DATE BETWEEN TRUNC(CURRENT_DATE)
                     AND TRUNC(CURRENT_DATE) + INTERVAL '1' DAY - INTERVAL '1' SECOND AND
        ROWNUM <= 10
  ORDER BY DUE_DATE ASC 

後者の例は、インデックスを使用できるため、パフォーマンスが向上する可能性があります (DUE_DATE にインデックスがあると仮定します)。もちろん、TRUNC(DUE_DATE) に関数ベースのインデックスを追加することもできます。その場合、どちらも同じようにうまく機能する可能性があります。

共有してお楽しみください。

于 2012-08-10T16:28:53.233 に答える
0

CURRENT_DATE には、月、日、および年が含まれます。あなたの期日には、おそらく時、分、秒も含まれています。その場合は、比較を行うときに日付を切り捨てる必要があります。

于 2012-08-10T16:32:10.670 に答える