首页 > 解决方案 > 在请求 oracle 中按日期选择(之间)

问题描述

我编写了一个在 apex oracle 中使用的查询,在其中添加了过滤器,但是当我添加日期选择时,此查询不起作用(尽管没有语法错误)。我会很感激你的帮助

select eb.ID,
       eb.NAME,
       eb.TEMP,
       eb.ID_TRANS,
       eb.CR_DATE,
       eb.DATE_TMRT,
       ah.name as Silo_name,
       we.name as ORGANIZATIONS,
       ad.name as item
              from TEMPR_SILO  eb
              left join  ORGANIZATIONS we on  eb.ORGANIZATIONS =  we.id
              left join  ITEM_CRITICALTEMP ad on  ad.id <> 0 
              left join  silo ah  on  ah.id = ad.id_silo 
where   (:P115_ORG is null or we.name = :P115_ORG) 
and (:P115_SILO_NAME is null or  ah.name = :P115_SILO_NAME) 
and  to_timestamp(eb.DATE_TMRT)  between to_timestamp(:P115_DATA1,'dd.mm.yyyy') and to_timestamp(:P115_DATA2,'dd.mm.yyyy') 
------ when "OR" is missing then everything works ---
or   (:P115_DATA2 is null OR :P115_DATA1 is null)
group by
       eb.ID,
       eb.NAME,
       eb.TEMP,
       eb.ID_TRANS,
       eb.CR_DATE,
       eb.DATE_TMRT,
       we.name,
       ah.name,
       ad.name  

但是可能没有指定过滤日期,我需要所有记录都可用,因此应该是“OP”。如果您能帮我找出错误,我将不胜感激!

标签: sqloracleoracle-apex

解决方案


我想应该是

where
  (                                                              --> this 
       (:P115_ORG is null or we.name = :P115_ORG) 
   and (:P115_SILO_NAME is null or  ah.name = :P115_SILO_NAME) 
   and  to_timestamp(eb.DATE_TMRT)  between to_timestamp(:P115_DATA1,'dd.mm.yyyy') 
                                        and to_timestamp(:P115_DATA2,'dd.mm.yyyy') 
  )                                                              --> this
  --
  or   (:P115_DATA2 is null OR :P115_DATA1 is null)

即,将所有AND条件括在自己的括号中,并将OR条件排除在外。


推荐阅读