2017-04-25 3 views
0

以下のコードを参考にしてもらえますか?私は以下に概説された課題を実行しようとしています。パラメータを使ってデコードすることは可能ですか?DECODE関数の使用

DECODE(:START_DATE、NULL、a.issue_date> =(TRUNC(TRUNC(SYSDATE、 'MONTH') - 1 'MONTH'))、a.issue_date> = START_DATE) DECODE(:END_DATE、 NULL、a.issue_date < =(trunc(sysdate、 'MONTH') - 1)、a.issue_date < =:END_DATE)

私が使用しているプログラミング言語はSQLです。

+0

まさしく「以下に概要を説明するタスク」は何をしようとしていますか? – Donnie

+0

私はSTART_DATEとEND_DATEという2つのパラメータを持っています。人に開始日と終了日を入力して、入力した2つのパラメータの間に日付データが表示されるようにします。また、パラメータがnullのままになっていると、前月の日付情報が表示されます。前月の最初と最後の日) –

+0

Oracle SQLを使用しています –

答えて

0

これはあなたがやろうとしていることですか?お役に立てれば。

select * 
from <table> a 
where a.issue_date between DECODE (:START_DATE, NULL, (trunc(trunc(sysdate,'MONTH')-1,'MONTH')), :START_DATE) 
and DECODE (:END_DATE, NULL, (trunc(sysdate,'MONTH')-1), :END_DATE) 
0

私はDECODEがあなたを助けているとは思わない。それは動作しますが、私の意見では、コードを読みにくくしています。私はこれらがあなたの2つの条件だと思います。 (1)issue_dateをユーザーの入力と比較します。 (2)ユーザーの入力値が両方ともNULLの場合は、前月の開始日と終了日の日付値と比較します。また、DECODEを使用すると、issue_dateに索引がある場合、それを使用できないことがあります。

select * 
from table a 
where (a.issue_date >= :START_DATE and a.issue_date <= :END_DATE) 
    OR (:START_DATE is null AND :END_DATE IS NULL 
     AND a.issue_date >= TRUNC(ADD_MONTHS(SYSDATE,-1),'MONTH') AND a.issue_date < TRUNC(SYSDATE,'MONTH')