在请求 oracle 中按日期选择(之间)
Posted
技术标签:
【中文标题】在请求 oracle 中按日期选择(之间)【英文标题】:Selection by date in request oracle (between) 【发布时间】:2020-03-06 07:39:57 【问题描述】:我编写了一个在 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”。如果您能帮我找出错误,我将不胜感激!
【问题讨论】:
Apex_MAN,这仍然是个问题吗?您是否查看了以下答案? @DanMcGhan 是的,这是一个问题,在下面的答案中它只隐藏了 quola 给不为空。如果为空则错误! ,但是mpen还有另一个问题。我已经这样做了,当我更改至少一个 ITEM 时,我有一个动态操作(使用新的 ITEM 参数更新页面),但我想在它们下创建一个按钮来清除所有过滤器。我还使用了一个动态操作,其中我将所有项目分配为空。但是随后页面会不断重新加载。我无法解决这个问题( @DanMcGhan 事实证明我有 3 个过滤器(:P115_SILO_NAME、:P115_ORG 和:P115_DATA1、:P115_DATA2),但除日期之外的所有内容都是正确的( 我很难理解你,但让我们试着专注于你在使用日期过滤器时遇到困难的事实。你说它们不能正常工作是什么意思?你得到一个错误,没有行回来,还是别的什么?eb.DATE_TMRT
的数据类型是什么?给我一个你在 P115_DATA1 和 P115_DATA2 中测试的值的例子。
@DanMcGhan (:P115_ORG 为 null 或 we.name = :P115_ORG) 和 (:P115_SILO_NAME 为 null 或 ah.name = :P115_SILO_NAME) 和 (to_timestamp(eb.DATE_TMRT,'dd.mm. yyyy hh24:mi:ss') 在 to_timestamp(:BV1,'dd.mm.yyyy hh24:mi:ss') 和 to_timestamp(:BV2,'dd.mm.yyyy hh24:mi:ss') 或 (:BV2为空或:BV1 为空))
【参考方案1】:
我想应该是这样的
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
条件排除在外。
【讨论】:
感谢您的帮助,您还能看看我的一个问题吗? ***.com/questions/60503335/…【参考方案2】:假设条件(BETWEEN/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)
到
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))
我认为应该可以。
第二种情况:当所有条件或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)
【讨论】:
以上是关于在请求 oracle 中按日期选择(之间)的主要内容,如果未能解决你的问题,请参考以下文章
如果日期列介于开始日期和结束日期之间,则选择行 FMDB 请求
如何在 CI Active Record 中按 MAX 日期选择