日期:2014-05-16  浏览次数:20489 次

有关几天之后的讨论
最近碰到一个很有意思的问题,就是关于在oracle中几天之后的实现问题。有很多程序员应该都是这么写的, 比如说是判断某个订单提交7天后的状态,
case when to_date(nvl(submitdate,'1988-02-02'),'yyyy-mm-dd') + 7>=trunc(sysdate) then 1 else 0 end
因为都会想到,提交时间加上7天,如果大于今天,则即为7天以后,这可能是思维定势吧,刚开始的时候都认为是对的,我也是,但仔细想想,就会发现问题
比如提交日期是9月1日,7天后是9月8日,今天就是9月8号,那明天的时候,7天已过,到底是谁大于谁呢?
呵呵,想明白了吧。所以应该是
case when to_date(nvl(submitdate,'1988-02-02'),'yyyy-mm-dd') + 7<trunc(sysdate) then 1 else 0 end
其实我们可以这么想,提交日期是个固定日期,7天也就是固定时间段,提交日期+7天就是未来的一个时间点,现实中的时间(sysdate)从提交日期开始,慢慢地流淌至这个时间点,当大于这个时间点时,也就是
我们想要的7天之后了。
问题虽然简单,但可引导我们更加积极的思考