2009-08-04 110 views
1

我有一個使用Oracle數據源的SSRS報告。我有一個查詢;將日期參數傳遞給SSRS中的Oracle查詢

select * from myTable t where 
t.date between Date '2009-08-01' and Date '2009-08-04' + 1 

此查詢在Oracle和SSRS中均有效。當t.date列在08/01/2009和08/04/2009之間時,它從myTable獲取所有行。 t.date列的類型是Date()

現在,我希望日期是參數。所以我將查詢改爲:

select * from myTable t where 
t.date between Date :myDate and Date :myDate + 1 

當我在SSRS中運行此查詢時,它會提示我爲myDate輸入一個值。

我試過2009-08-01,'2009-08-01'都導致oracle sql處理錯誤:「Missing expression」。

任何想法?

回答

2

如果你堅持有一個參數(:myDate),使用with子句可以使過程更清潔。我不熟悉你的例子中的語法(即'日期'就像在查詢中投射一樣),下面是一個SQL唯一的實現。

with 
select TRUNC(TO_DATE(:mydate, 'yyyy-mm-dd')) p_date from dual as parameters 
select t.* 
from 
    myTable t, 
    parameters 
where 
    trunc(t.date) between parameters.p_date and parameters.p_date + 1 
0

您是否嘗試過在「報告參數」菜單中確保該參數是DateTime類型(默認情況下爲字符串)?

+0

使用的語法是字符串變量(即日期*字符串*) – 2009-08-04 22:29:05

+0

這是不正確的。 IIRC使用datetime數據類型不能解決問題。問題是使用兩次參數名稱。 – ErikE 2010-08-31 00:26:16

1

只因爲你使用過:myDate兩次並不意味着它們是相同的。它們是佔位符,並且由於您有兩個佔位符,所以需要兩個值。

1

這個工作對我使用SSRS:

SELECT t.* 
FROM myTable t 
WHERE t.date between :myDate AND to_date(:myDate + 1) 
0

我也有類似的問題,一個更大的查詢,我發現根本搜索和替換例如:使用TO_DATE(:mydate)的mydate足以解決問題 - 然後將同一日期傳遞給查詢中的TO_DATE(:mydate)的每個實例。

如果你想要一個日期範圍傳遞給查詢,我會給參數不同的名稱,例如:SQL中的StartDate和EndDate,並在報表中具有單獨的參數@StartDate和@EndDate。這使得SQL更清晰。