以下sql代码有什么作用?

时间:2011-12-01 07:31:43

标签: sql oracle oracle11g

我已经在互联网上看到了以下代码

select round(abs(months_between(sysdate,add_months(hire_date,12*(round((months_between(sysdate,hire_date)/12)))))))
from employees

遗憾的是,没有足够的信息,如果它做了什么,我在我的oracle 11.g数据库中运行此命令,并查看是否有数字,如6,5,4,7,3,2

5
2
1
1
6
5
2
2
3
像这样,请我知道功能,只是无法确定它的用法,代表这个数字是什么?请帮帮我

3 个答案:

答案 0 :(得分:7)

从内到外工作: -

round( (months_between(  sysdate,  hire_date)   /12)

获取雇员受雇的完整年数

  add_months( hire_date,12 * (years calculated above )

获取雇员自雇用以来完成n年的日期

round(abs(months_between( sysdate, date employee completed n years )

获取下一个全年就业的月数。

不知道为什么!

答案 1 :(得分:2)

在我看来,根据雇用日期,人们会计算下一个全年的月数。它也可能是达到一整年的最后一点,具体取决于接近现在的时间点。

  • 首先他计算了当前日期和雇用日期之间的差异并将其四舍五入到全年
  • 然后他将年份(转换为数月)添加到雇用日期,因此这个日期将是下一个达到全年就业的时间点
  • 至少他计算从现在到整年就业的下一个(或最后一个)时间点之间的月数

我认为以下陈述应该给你相同的结果:

select abs(month_between(sysdate,hire_date)) % 12

答案 2 :(得分:0)

这只是从雇员的雇用日期到当前日期的绝对和四舍五入的差异。它只是比较当前日期和雇用日期