Sql 带有日期范围的where子句给出了奇怪的结果
在xml publisher报告中,我有以下where子句:Sql 带有日期范围的where子句给出了奇怪的结果,sql,oracle,oracle-ebs,xml-publisher,Sql,Oracle,Oracle Ebs,Xml Publisher,在xml publisher报告中,我有以下where子句: where NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number and xx.ordered_date between NVL(TRUNC(fnd_date.canonical_to_date(:P_FROM_DATE)), xx.ORDERED_DATE) and NVL(TRUNC(fnd_date.canonical_to_date(:P_TO_
where NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number
and xx.ordered_date between NVL(TRUNC(fnd_date.canonical_to_date(:P_FROM_DATE)), xx.ORDERED_DATE) and NVL(TRUNC(fnd_date.canonical_to_date(:P_TO_DATE)), xx.ORDERED_DATE)
AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id
但它的行为很奇怪,在日期范围内,它的结果是正常的,但在日期范围外,它的结果是空的
我也尝试了以下方法:
where NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number
and ( NVL(TRUNC(fnd_date.canonical_to_date(:P_FROM_DATE)), xx.ORDERED_DATE) > xx.ordered_date
or NVL(TRUNC(fnd_date.canonical_to_date(:P_TO_DATE)), xx.ORDERED_DATE) < xx.ordered_date )
AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id
其中NVL(:P\u订单号,xx.订单号)=xx.订单号
和(NVL(TRUNC(fnd_date.canonical_to_date(:P_FROM_date)),xx.订单日期)>xx.订单日期
或NVL(TRUNC(fnd_date.canonical_to_date(:P_to_date)),xx.订购日期)
在并发程序中,日期参数具有FND_STANDARD_DATE。有许多方法可以为这只猫蒙皮,这只是一种方法。顺便说一句,在你的例子中,你给出的日期是4月31日,这是不存在的
SELECT TO_Char(ordered_date,'DD-MON-YYYY') as ordered_date,
order_number, customer_name
FROM order_tbl
WHERE NVL(:P_ORDER_NUMBER, order_number) = order_number
AND ordered_date between NVL(TO_DATE(:P_FROM_DATE,'DD-MON-YYYY'),TO_DATE('01-MAR-1900','DD-MON-YYYY')) and NVL(to_date(:P_TO_DATE,'DD-MON-YYYY'),TO_DATE('31-DEC-2100','DD-MON-YYYY'))
AND NVL(:P_CUSTOMER_NAME, customer_name) = customer_name
你的问题是什么?我想如果用户只选择订单号,它应该只显示该订单,但如果用户选择日期范围和客户,它必须显示该客户在该日期范围内的订单。你能显示一些示例数据和预期输出吗,这将有助于我们理解你想将其添加到问题中的内容在示例中,4月31日在哪里?问题在于YYYY,YYYY不返回任何内容,而“RRRR”有效,您能告诉我有什么区别吗?4月31日在电子表格中的示例1中。我相信YYYY从不假设世纪,而RRRR则假设世纪(这样你就可以避免不明确),我总是使用YYYY,并且在指定世纪时没有问题,因此可能存在其他我不知道的差异。