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