Sql 如何确定员工的确切年龄(以年和月为单位)

Sql 如何确定员工的确切年龄(以年和月为单位),sql,oracle,Sql,Oracle,我有一个带有DOB列的employee表,所以,现在我想显示当前年龄的所有员工。 为了找出年龄,我知道下面的查询 SELECT * FROM (SELECT ename, job, dob, TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/12,1) AGE FROM employee); 通过使用此查询,我可以获得所有员工的年龄,但我的要求是,如果员工年龄显示

我有一个带有DOB列的employee表,所以,现在我想显示当前年龄的所有员工。 为了找出年龄,我知道下面的查询

SELECT *
FROM   (SELECT ename,
               job,
               dob,
               TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/12,1) AGE
        FROM   employee);
通过使用此查询,我可以获得所有员工的年龄,但我的要求是,如果员工年龄显示为2.5岁,那么我需要将该年龄显示为2岁6个月。

试试这个-

SELECT ename,
       job,
       dob, --TRUNC(MONTHS_BETWEEN(SYSDATE, DOB) / 12, 1) AGE
       trunc(months_between(sysdate, DOB) / 12) || ' years ' ||
       trunc(mod(months_between(sysdate, DOB), 12)) || ' months ' AGE
  FROM employee;

你之前的月数除以12。你只需要在除以12时找到商和余数——在这个例子中是2和6。看看这些注释,看看为什么这不是完美的,但很可能是足够的:@Wernfried Domscheit,是的,上面的查询丢弃了差值的天数部分。如果我们需要考虑到这一点,那么我们可以如下修改查询——选择dob,-truncmondurs|u BETWEENSYSDATE,dob/12,1岁truncmondurs|u BETWEENSYSDATE,dob/12 | | | | |年| truncmondurs| u BETWEENSYSDATE,dob,12 | | | |月| truncsyd,从员工开始计算的实际月数| | | | |天|日|日|日|日|日|日|;