1

わかりました、質問の最初の部分の回答を得たので、これが 2 番目の部分です。:-) PLSQL クエリでは、次のような基準があります。

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin)
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd)

今、私は :DateEnd 自体を使用したくありません.1日を追加して、日時を真夜中と比較すると、翌日の真夜中になるようにします. 残念ながら、私がそうするとき

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin)
    and Doc3.clinicalDate < ml.convert_date_to_id(:DateEnd + 1)

「ORA-06553: PLS-306: 「CONVERT_DATE_TO_ID」の呼び出しで引数の数またはタイプが間違っています」というメッセージが表示されます。":DateEnd + interval '1' day" を指定すると、"ORA-30081: 日時/間隔演算のデータ型が無効です" (:DateEnd は 31-MAY-2012 にバインドされます)。「convert_date_to_id(add_months(:DateEnd, 1))」を実行すると、正常に動作します。何かご意見は?ありがとう。

ETA: これは SSRS 2008 R2 プロジェクトであり、レポート パラメーターで DateTime パラメーターとして定義されていることを明確にする必要がありDateBeginますDateEnd。私の現在の回避策は、:DateEndクエリ パラメータをレポート パラメータ + 1 に等しく設定する@DateEndことですが、いつかこれを適切に文書化するのを忘れて、レポートを維持しようとしている人を混乱させるのではないかと心配しています (それは私かもしれません)。 . 前に提案したように、文字列パラメーターを渡したくありません。

4

3 に答える 3

2

が日付を表すではなく を入力パラメータとしてml.convert_date_to_id取り、バインド変数が であると仮定すると、次のようなものが必要になります。DATEVARCHAR2:DateEndVARCHAR2

ml.convert_date_to_id( to_date( :DateEnd, 'DD-MON-YYYY' ) + 1 )

また

ml.convert_date_to_id( to_date( :DateEnd, 'DD-MON-YYYY' ) + interval '1' day )
于 2012-05-29T21:46:10.327 に答える
2

I'm thinking that the parameters being DateTime is root of the problem. Microsoft DateTime datatypes are way more granular than Oracle's in that it supports fractional seconds and Oracle DATE format does not (Oracle TIMESTAMP does however).

Since ADD_MONTHS just spits back whatever it's passed in DATE datatype (i.e. passed TIMESTAMP becomes DATE). So maybe you can convert the parameter and add the day that way:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate < ml.convert_date_to_id(CAST(:DateEnd as DATE)+1) 

Alternatively, forget about conversions and date arithmetic on the parameters and subtract a day from the second clinicalDate:

where Doc3.clinicalDate >= ml.convert_date_to_id(:DateBegin) 
    and Doc3.clinicalDate - 1 < ml.convert_date_to_id(:DateEnd) 
于 2012-06-28T18:44:28.377 に答える
0

to_date値を変換するために使用します。例えば:

select &date + 1 from dual

通知は正常にto_date('29052012','ddmmyyyy')機能します

知らせる'29-may-2012'ことは与えるORA-01722: invalid number

于 2012-05-29T21:16:19.327 に答える