2014-02-28 70 views
1

我有一個SSRS 2005報告在Oracle 9數據庫上運行。SSRS 2005將日期時間參數傳遞給Oracle

報告使用這種簡單的查詢返回的數據集

SELECT order_number FROM apps.oe_order_headers_all 
    WHERE ordered_date >= to_date(:start_date,'DD-MON-YYYY') 
    AND ordered_date < to_date(:end_date,'DD-MON-YYYY') +1 

參數正常工作,如果他們是在SSRS字符串類型。例如。 01-JAN-2014同時爲start_date和end_date。但是,如果更改爲datetime,則報告不會返回任何內容(如果在字符串中,報告將返回許多行)。我真的想使用SSRS的日期選擇器控件。

這可能比Oracle的東西更像是一個SSRS的東西?

回答

2

這可能是一個日期轉換問題,但我很驚訝它沒有錯誤或返回相同的數據 - 至少在您給出的示例日期。

在您之前的問題中,您輸入了一個字符串,因此添加to_date()意義重大。但如果你將它綁定爲作爲日期那麼你不想要這些。

這是罰款:

to_date(<string>,'DD-MON-YYYY') 

但這:

to_date(<date>,'DD-MON-YYYY') 

真的是這樣做的:

to_date(to_char(<date>,<NLS_DATE_FORMAT>), 'DD-MON-YYYY') 

如果你的`NLS_DATE_FORMAT恰好是一樣的固定格式,你提供,那麼這是好的,因爲它只是一個字符串和多餘的轉換。但是,如果他們不同,那麼你會得到錯誤或不正確的結果。

例如,如果我的NLS_DATE_FORMATMM/DD/YYYY' then TO_DATE(SYSDATE,「DD-MON-YYYY ) gets an ORA-01843:不是有效的月份​​3210 28 as the month and 02`爲天

所以你只需要簡化它:

SELECT order_number FROM apps.oe_order_headers_all 
WHERE ordered_date >= :start_date 
AND ordered_date < :end_date +1 

鑑於奇錯誤你從這個搞定了,你也可以嘗試:

AND ordered_date < :end_date + interval '1' day 

...但不明白爲什麼簡單的+1錯誤我不確定這會有幫助。它似乎沒有遵循正常的datetime arithmetic rules。這是另一種可能性,但不應該是必要的:

AND ordered_date < CAST(:end_date AS DATE) + 1 
+0

嗨,我得到這個ORA-00932:不一致的數據類型:預計DATE有NUMBER。但是,如果我刪除了「+ 1」,它就會起作用。現在可能是pl sql的東西? – thotwielder

+1

@thotwielder - 這是一個奇怪的錯誤,它應該沒問題,如果綁定實際上是一個日期。不知道SSRS,OCI事物(使用內部原始格式)如何傳遞日期,或者......什麼是不尋常的。不幸的是,我不敢實驗。 –

+0

@AlexPoole首先計算_arithmetic expression_ ..當看到'+ 1'時,另一個操作數與NUMBER相同(因爲優先級大於NUMBER,而不是日期..'to_date()'應該已經解決那麼)..哪裏 - 如在關係檢查與'DATE'數據類型..它被隱式地轉換爲'DATE'!只是我的猜測.. –