Sql 带有日期范围的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_

在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_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,并且在指定世纪时没有问题,因此可能存在其他我不知道的差异。