2015-06-22 85 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

相關問題