2009-08-04 20 views
1

Oracleデータソースを使用するSSRSレポートがあります。私には質問があります。SSRSのOracle Queryに日付パラメータを渡す

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

このクエリは、OracleとSSRSの両方で機能します。 t.date列が2009年8月1日から2009年8月4日の間にある場合、myTableからすべての行が取得されます。 t.date列の型はDate()です。

ここで、日付をパラメータにします。 MyDateに該当:私はSSRSでこのクエリを実行すると、それが値を入力するように私を促し

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

:だから私はにクエリを変更しました。

私は2009-08-01を試しました。「2009-08-01」は、両方ともoracle sql処理エラーが発生します。「式が見つかりません」。

アイデア?

答えて

2

1つのパラメータ(:myDate)を持つことを主張する場合は、with句を使用すると、プロセスを少しきれいにすることができます。あなたの例で使用している構文(クエリのキャストのような 'Date')に慣れていないので、以下は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

構文は、文字列変数(すなわち日*文字列*) –

+0

これは間違っているためです。 IIRCでは、datetimeデータ型を使用しても問題は解決しません。問題は、パラメータ名を2回使用することです。 – ErikE

1

myDateが2回使用されているということは、同じことを意味するものではありません。それらはプレースホルダーで、2つのプレースホルダーがあるため、2つの値が必要です。

+0

@Saobi - これは私の経験では正しいです。パラメータを繰り返すことはできないので、私はそれがBrianが与えたWITHメソッドの理由だと思います。あるいは、myDate2を作成し、同じSSRSパラメーターをMyDateとしてバインドすることもできます。 – ErikE

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)のすべてのインスタンスに渡されました。

クエリに渡された日付範囲をしたい場合、私はパラメータに異なる名前を与えるだろう例えば:StartDateと:EndDateをSQLで使用し、@StartDateと@EndDateという別々のパラメータをレポートに追加します。これは、SQLをはるかに明確にします。使用

関連する問題