Sql 如何确定员工的确切年龄(以年和月为单位)
我有一个带有DOB列的employee表,所以,现在我想显示当前年龄的所有员工。 为了找出年龄,我知道下面的查询Sql 如何确定员工的确切年龄(以年和月为单位),sql,oracle,Sql,Oracle,我有一个带有DOB列的employee表,所以,现在我想显示当前年龄的所有员工。 为了找出年龄,我知道下面的查询 SELECT * FROM (SELECT ename, job, dob, TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/12,1) AGE FROM 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,从员工开始计算的实际月数| | | | |天|日|日|日|日|日|日|;