Sql 在请求oracle中按日期选择(介于之间)

Sql 在请求oracle中按日期选择(介于之间),sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我编写了一个在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

我编写了一个在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应该是可用的。如果您能帮我找到错误,我将不胜感激

我想应该是这样的

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)

i、 e.把所有的和条件都放在自己的括号内,把或条件放在括号外。

我想应该是这样的

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)

i、 e.将所有和条件括在各自的括号中,并将或条件从括号中去掉。

假设/NULL之间的条件之一为真。 更改以下内容

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)

我认为应该行得通

第二种情况:当所有条件或空条件都应为真时:

(
(: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')
) 
or   (:P115_DATA2 is null OR :P115_DATA1 is null)

假设conditionBETWEEN/NULL中的一个应该为true。 更改以下内容

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)

我认为应该行得通

第二种情况:当所有条件或空条件都应为真时:

(
(: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')
) 
or   (:P115_DATA2 is null OR :P115_DATA1 is null)

谢谢你的帮助,你还能看看我的一个问题吗?谢谢你的帮助,你还能看看我的一个问题吗?老兄,这还是个问题吗?你看过下面的答案了吗?@DanMcGhan是的,这是一个问题,在下面的答案中,它只隐藏了要给出的quola,而不是空的。如果空的话,那就是一个错误,但mpen还有另一个问题。我是这样做的,当我至少更改一个项目时,我会有一个动态操作,用新的项目参数更新页面,但我想在它们下面创建一个按钮来清除所有过滤器。其中,我还使用了一个动态操作,其中我将所有项分配给null。但随后会不断地重新加载页面。我无法解决这个问题@DanMcGhan事实证明我有3个过滤器:P115_SILO_NAME,:P115_ORG,和:P115_DATA1,:P115_DATA2,但正确地说,除了日期之外的所有内容我都很难理解您,但让我们试着关注您在使用日期过滤器时遇到困难的事实。你说它们不能正常工作是什么意思?您是否遇到错误,是否没有行返回,或其他问题?eb.DATE\U TMRT的数据类型是什么?请给我一个您在P115_数据1和P115_数据2中测试的值的示例。@DanMcGhan:P115_ORG为null或we.name=:P115_ORG和:P115_SILO_name为null或ah.name=:P115_SILO_name和to_timestamp eb.DATE_TMRT,'dd.mm.yyyyyy hh24:mi:ss'介于时间戳:BV1、'dd.mm.yyyyyyyyyyy h24:mi:ss'和to_时间戳:BV2之间,“dd.mm.yyyy hh24:mi:ss”或:BV2为空或:BV1为空,这仍然是一个问题吗?你看过下面的答案了吗?@DanMcGhan是的,这是一个问题,在下面的答案中,它只隐藏了要给出的quola,而不是空的。如果空的话,那就是一个错误,但mpen还有另一个问题。我是这样做的,当我至少更改一个项目时,我会有一个动态操作,用新的项目参数更新页面,但我想在它们下面创建一个按钮来清除所有过滤器。其中,我还使用了一个动态操作,其中我将所有项分配给null。但随后会不断地重新加载页面。我无法解决这个问题@DanMcGhan事实证明我有3个过滤器:P115_SILO_NAME,:P115_ORG,和:P115_DATA1,:P115_DATA2,但正确地说,除了日期之外的所有内容我都很难理解您,但让我们试着关注您在使用日期过滤器时遇到困难的事实。你说它们不能正常工作是什么意思?您是否遇到错误,是否没有行返回,或其他问题?eb.DATE\U TMRT的数据类型是什么?请给我一个您在P115_数据1和P115_数据2中测试的值的示例。@DanMcGhan:P115_ORG为null或we.name=:P115_ORG和:P115_SILO_name为null或ah.name=:P115_SILO_name和to_timestamp eb.DATE_TMRT,'dd.mm.yyyyyy hh24:mi:ss'介于时间戳:BV1、'dd.mm.yyyyyyyyyyy h24:mi:ss'和to_时间戳:BV2之间,“dd.mm.yyyy hh24:mi:ss”或:BV2为空或:BV1为空