使用DECODE函数

时间:2017-04-25 22:43:31

标签: sql oracle decode

有人可以帮我解决下面的代码吗?我正在尝试执行下面列出的任务。是否可以使用参数进行解码?

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。

2 个答案:

答案 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')