有人可以帮我解决下面的代码吗?我正在尝试执行下面列出的任务。是否可以使用参数进行解码?
DECODE(:START_DATE,NULL,a.issue_date> =(trunc(trunc(sysdate,' MONTH') - 1,' MONTH')),a.issue_date&gt ; =:START_DATE) DECODE(:END_DATE,NULL,a.issue_date< =(trunc(sysdate,' MONTH') - 1),a.issue_date< =:END_DATE)
我使用的编程语言是SQL。
答案 0 :(得分: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)
答案 1 :(得分: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')