在Oracle中获取两个日期之间的天数,包括这两个日期。

13

我想获取两个给定日期之间的总天数。我尝试了下面的查询,但没有得到精确的差异;最后一个日期没有被包括在内。

select (to_date ('15-06-13','dd-MM-yyyy') - to_date('01-02-12','dd-MM-yyyy')) 
  from dual

这应该返回501天,但实际上只返回了500天。如果我在计算后添加+1,那么就会得到正确的结果。

我真的需要包括+1吗?还是有其他方法可以获得实际结果?


3
它返回500天,因为那是两个日期之间的差异 :-). 如果你想要它返回比差异多1天的结果,那么你需要加1,是的。 - Ben
@Ben:我认为它没有添加结束日期(即15-06-13)或开始日期(01-02-12)。我不想再加一天。请参考此链接http://www.timeanddate.com/date/durationresult.html?d1=1&m1=2&y1=2012&d2=15&m2=6&y2=2013&ti=on - user968441
2
链接上说“在计算中包括结束日期(添加1天)”,它明确告诉你将会加上一天。只是减法的默认行为不符合你的要求,10 - 4 是6,而不是5。如果你想改变默认行为,你必须手动进行设置。 - Ben
1个回答

19

在Oracle中,两个日期相减将返回两个日期之间的天数。
minus运算符的工作方式与数字相同:

20 - 20 = 0   ===>      2013-05-20  -  2013-05-20 = 0
25 - 20 = 5   ===>      2013-05-25  -  2013-05-20 = 5

如果您想包括最后一个数字最后一个日期,则需要加1:

20 - 20 + 1 = 1   ===>      2013-05-20  -  2013-05-20  + 1 = 1
25 - 20 + 1 = 6   ===>      2013-05-25  -  2013-05-20  + 1 = 6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接