2016-05-17 5 views
0
WHERE Customer.LastTranDate BETWEEN 
udf_functions.udf_oracledatetimetotdatetime(to_date('2012/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS')) 
AND  
udf_functions.udf_oracledatetimetotdatetime(to_date('2016/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS')) 

上記の条件は、特定の日付では問題なく機能しましたが、12ヶ月間、つまり今日の日付と12ヶ月前の間に同じ条件をチェックしたいと思います。pl/sqlでの日付間の条件

私は以下を試みましたが、うまくいかなかった。

WHERE Customer.LastTranDate BETWEEN 
udf_functions.udf_oracledatetimetotdatetime(to_date(to_char(sysdate,'YYYY/MM/DD HH24:MI:SS'))) 
AND 
udf_functions.udf_oracledatetimetotdatetime(to_date(to_char(add_months(sysdate,-12),'YYYY/MM/DD HH24:MI:SS'))) 

誰でも手助けできますか?

ありがとうございます!

+0

日付を切り替える必要があります。 'BETWEEN'はからになります。あなたはそれを逆向きにしています。 –

+0

両方をスワップしても試してみました..うまくいかなかった...投げ捨てエラーORA-01861:リテラルが書式文字列と一致しません – Cooluser

+0

'udf_functions.udf_oracledatimetimetatetime'は何をしますか? –

答えて

1

hh?なぜ、文字列への変換と文字列からの変換はすべてですか?

WHERE Customer.LastTranDate BETWEEN 
      udf_functions.udf_oracledatetimetotdatetime(add_months(sysdate, -12)) AND 
      udf_functions.udf_oracledatetimetotdatetime(sysdate 

to_date()により示唆されるように関数は、その後文字列とさかのぼるとに変換する必要がない、(引数としてOracle dateを取る場合。

なぜ私は本当に理解していませんこのような変換を行うためのUDFを持っている。それが唯一のパフォーマンスを傷つけることができます。

+0

お返事ありがとうございます。それはうまくいったが、YYYY/MM/DD HH24:MI:SSの形式でそれを欲しい。これが変換の理由です。 – Cooluser

+2

@Cooluser - 意味がありません。日付は、05/20/2016 16:30:00の前または後のいずれかです。そうでない場合は、あなたの心に日付(文字列として)がどの形式であるかは関係ありません。比較のために渡す必要があるのは、文字列ではなく日付です。 SYSDATEはすでに日付であるため、変換するための書式マスクを与える必要はありません。もしあなたがSYSDATEの代わりにテーブルから** date_column **を持っていて、** date_column **が文字列形式(それはそうではないはずですが)でなければ、フォーマットマスクが必要なのかもしれません。フォーマットマスクを与えます。それは理にかなっていますが、SYSDATEでは意味がありません。 – mathguy

0

日付変換の必要をクエリのごWHERE一部に。

を使用すると、特定の形式で日付を必要とする場合、あなたはそれを行いますSELECT部分でWHEREのままにしてください