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允许不等式运算符,因此它更具可读性.
@Allan已经为你提供了最好的解决方案,但是如果你坚持使用decode函数,你可以处理sign函数的结果.
http://www.techonthenet.com/oracle/functions/sign.php
sign(a)返回-1if a < 0,0if a = 0和1if 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)