Oracle日期差异获得的年数

Mat*_*att 26 oracle select

有没有办法计算日期之间的年数.不知道如何做到这一点,同时考虑到飞跃,什么不是.是否可以在SELECT中执行IF语句?

谢谢

Ren*_*ger 43

我用months_between,可能结合floor:

select floor(months_between(date '2012-10-10', date '2011-10-10') /12) from dual;

select floor(months_between(date '2012-10-9' , date '2011-10-10') /12) from dual;
Run Code Online (Sandbox Code Playgroud)

floor确保你得到圆满的岁月.如果你想要小数部分,你显然不想使用floor.

  • 我使用`select trunc(months_between(date_end,date_start)/ 12)"Age"来自dual;`来获得年龄. (3认同)

eao*_*son 16

如果您只想要多年的差异,那就是:

SELECT EXTRACT(YEAR FROM date1) - EXTRACT(YEAR FROM date2) FROM mytable
Run Code Online (Sandbox Code Playgroud)

或者你也想要分数年?

SELECT (date1 - date2) / 365.242199 FROM mytable
Run Code Online (Sandbox Code Playgroud)

据谷歌称,365.242199是1天.

  • 差异`EXTRACT(YEAR FROM date1) - EXTRACT(YEAR FROM date2)`是完全错误的获取年数的方式`Ex:date_start = 21-08-2000,date_end = 01-01-2008`.根据你的逻辑,我们有**8年**,但实际上我们有**完整的****. (5认同)
  • 我认为这取决于“年份差异”的含义,这并不完全清楚。真的,2008-01-01 - 2000-08-21 大约是 7.4 年。 (2认同)
  • 需要额外的逻辑才能使这个答案准确。如果被减数(要减去的)的日期和月份晚于被减数,则必须从结果中减去一年。 (2认同)