2017-04-25 23 views
0

有人可以幫我下面的代碼。我正在嘗試執行下面列出的任務。是否有可能使用參數解碼?使用DECODE功能

DECODE(:START_DATE,NULL,a.issue_date> =(TRUNC(TRUNC(SYSDATE, '月') - 1, '月')),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的參數。我希望有人輸入開始日期和結束日期,以便日期數據在輸入的兩個參數之間顯示。同時,如果參數爲空,我希望顯示的日期信息爲上個月(即。上個月的第一天和最後一天) –

+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在幫助你。它有效,但在我看來,它使代碼更難閱讀。我認爲這是你的兩個條件。 (1)與用戶輸入相比issue_date。 (2)如果用戶輸入值都爲空,則與前一個月的開始和結束的日期值進行比較。此外,使用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')