根据打印报告的时间显示结果

时间:2013-03-19 20:01:51

标签: sql oracle

我正在创建Oracle报告,我希望根据打印报告的时间显示某些结果。有一个名为apply_date的字段。例如,如果我打印报告< = sysdate 3/15,那么我只想显示apply_date为3/1 - 3/15的记录。这也适用于每个月30日的打印。如果我在3/15之后打印报告,那么它只会显示apply_date为> = 3/16的结果。

2 个答案:

答案 0 :(得分: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'
      )

答案 1 :(得分:0)

为了充分利用索引并为优化器提供基数的最佳估计,我尝试构建SQL,以便谓词不依赖于应用于apply_date的函数:

 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     

执行R.H.S.谓词将转换为:

 where apply_date >= <date>
   and apply_date <  <date>