1

Oracle Report を作成していますが、レポートを印刷するタイミングに基づいて特定の結果を表示したいと考えています。apply_date というフィールドがあります。たとえば、レポート <= sysdate of 3/15 を印刷する場合、apply_date が 3/1 ~ 3/15 のレコードのみを表示したいとします。これは、毎月 30 日の印刷にも当てはまります。3/15 以降にレポートを印刷すると、apply_date >= 3/16 の結果のみが表示されます。

4

2 に答える 2

0

インデックスを最大限に活用し、オプティマイザーにカーディナリティの最適な見積もりを提供するために、述語がapply_dateに適用される関数に依存しないようにSQLを構築しようとします。

 where apply_date >= case
                     when extract(day from sysdate) < 16
                     then trunc(sysdate,'MM')
                     else trunc(sysdate,'MM')+16
                     end
   and apply_date <  case
                     when extract(day from sysdate) >= 16
                     then add_months(trunc(sysdate,'MM'),1)
                     else trunc(sysdate,'MM')+16
                     end     

実行時に、述語のRHSは次のように変換されます。

 where apply_date >= <date>
   and apply_date <  <date>
于 2013-03-19T21:03:32.007 に答える
0

where次のような句が必要です。

where (to_char(sysdate, 'DD') <= '15' and
       to_char(apply_date, 'YYYY-MM') = to_char(sysdate, 'YYYY-MM') and
       to_char(apply_date, 'DD') between '00' and '15'
      ) or
      (to_char(sysdate, 'DD') >= '16' and
       to_char(apply_date, 'YYYY-MM') = to_char(sysdate, 'YYYY-MM') and
       to_char(apply_date, 'DD') >= '16'
      )
于 2013-03-19T20:51:24.033 に答える