2015-06-22 49 views
-6

在一个XML发布报告,我有以下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 

,但它的行为很奇怪,与日期范围的结果是正确的,但出来的日期范围的结果为NULL。

我尝试以下太:在并发程序

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 

日期参数有FND_STANDARD_DATE。

+7

和你的问题是什么? – davegreen100

+0

我想如果用户只选择order_number它应该只显示该订单,但如果用户选择日期范围和客户,它必须显示该客户在该日期范围内的订单。 –

+0

您能否显示一些示例数据和预期输出,这将有助于我们理解您要的 – davegreen100

回答

0

有很多方法去皮肤这个特殊的猫,这只是一种方法。顺便说一下,在你的例子中,你给出了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 
+0

,哪里是4月31日? –

+0

问题在于YYYY,YYYY没有任何回报,并且'RRRR'有效,你能告诉我最新的差异吗? –

+0

4月31日在电子表格的例子1中。我相信YYYY永远不会假定世纪,而RRRR(因此你可以逃避不明确),我总是使用YYYY,并没有问题,因为我指定世纪,所以可能有其他差异,我不知道。 – davegreen100