2017-08-31 176 views
-1

我有一个带有DOB列的员工表,所以现在我想显示所有员工的当前年龄。
要了解我用这个查询我可以得到所有员工的年龄就知道查询如下如何找出年龄和月份的员工确切年龄

SELECT * 
FROM (SELECT ename, 
       job, 
       dob, 
       TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/12,1) AGE 
     FROM employee); 

的年龄,但我的要求是,如果显示的员工年龄为2.5,然后我需要显示,年龄为2年6个月。

+1

你有你除以12前的总个月你只需要找到商和余数除以12时 - 在这种情况下,2和6 –

回答

2

试试这个---

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; 
+1

有一个看看这些评论为了看看为什么这不是完美的(但最有可能是足够的):https://stackoverflow.com/questions/45974976/pl-sql-difference-between-two-dates/45977827?noredirect=1# comment78917731_45977827 –

+0

@Wernfried Domscheit,是的,上面的查询是放弃天差异的一部分。如果我们需要考虑这个问题,我们可以修改查询如下--- –

+0

SELECT dob,--TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/ 12,1)年龄 trunc(months_between(sysdate,DOB)/ 12 )|| '年'|| trunc(mod(months_between(sysdate,DOB),12))|| '月'|| TRUNC(SYSDATE - ADD_MONTHS(DOB, TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/ 12)* 12 + TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,DOB),12))))|| 'days'AGE FROM employee; –