使用解码函数比较Oracle中的日期

Fre*_*ddy 7 sql oracle decode date date-arithmetic

我需要使用Oracle解码函数比较两个日期,看看是否有一个日期less than or equal.

我找到了这篇文章 - http://www.techonthenet.com/oracle/functions/decode.php

如果date1> date2,下面的解码函数将返回date2的状态(在底部):

decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)
Run Code Online (Sandbox Code Playgroud)

如果date1> = date2,这不会返回date2吗?

或者只是date1> date2?

有更简单的解决方案吗?

All*_*lan 19

如果date2 <= date1,该函数将返回date2.插入值并转换为伪代码,您可以获得if 0 - 0 = 0 then date2 else date1两个日期相同的位置.

如果您使用8i或更高版本,最佳解决方案是使用case:

SELECT CASE WHEN date1 >= date2 THEN date2 ELSE date1 END FROM Your_Table;
Run Code Online (Sandbox Code Playgroud)

由于case允许不等式运算符,因此它更具可读性.


Kir*_*tev 7

@Allan已经为你提供了最好的解决方案,但是如果你坚持使用decode函数,你可以处理sign函数的结果.

http://www.techonthenet.com/oracle/functions/sign.php

sign(a)返回-1if a < 0,0if a = 01if a > 0.因此,以下逻辑

if date1 >= date2 then
    return date1;
else
    return date2;
end if;
Run Code Online (Sandbox Code Playgroud)

可以使用decode以下方式重写:

select decode(sign(date2-date1), 
              -1 /*this means date 1 > date 2*/, date1 /* return date1*/, 
               0 /*dates are equal */,           date1 /* again, return date1*/,
               /*in any other case, which is date2 > date1, return date2*/ date2) 
from dual;
Run Code Online (Sandbox Code Playgroud)