oracle 最年轻员工的年龄(岁)

k7fdbhmy  于 2023-01-16  发布在  Oracle
关注(0)|答案(3)|浏览(124)

我有一个表,名为employees,我需要得到几年来最年轻员工的年龄。
例如,如果我看一下表格,最年轻的员工是“57岁”
色谱柱:

EmployeeID, Lastname, Title, Birthdate, Hiredate, City, Country

我尝试的代码是这样的:

SELECT MAX(birthdate)
FROM employees;

这样,我就可以得到最年轻员工的出生日期,但现在我需要以某种方式将其与使用“sysdate”的当前日期进行比较,然后将其更改为数字,以便显示他是57岁,但我没有成功

gg58donl

gg58donl1#

您可以用途:

SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, MAX(birthdate))/12) AS age
FROM   employees;

其中,对于示例数据:

CREATE TABLE employees ( id, birthdate ) AS
-- First employee will be 20 tomorrow
SELECT 1, ADD_MONTHS(TRUNC(SYSDATE), -20*12) + INTERVAL '1' DAY FROM DUAL UNION ALL
-- Second employee is 25 today
SELECT 2, ADD_MONTHS(TRUNC(SYSDATE), -25*12) FROM DUAL;

输出:
| 年龄|
| - ------|
| 十九|
fiddle

0ejtzxu1

0ejtzxu12#

如果你不太关心月份和日期,一个简单的选择是从系统日期和最小的生日中提取year,然后减去它们:
样本数据:

SQL> with employees (employeeid, lastname, birthdate) as
  2    (select 1, 'Little', date '2015-08-25' from dual union all  --> youngest
  3     select 2, 'Foot'  , date '2000-11-13' from dual
  4    )

质询:

5  select extract(year from sysdate) - extract(year from max(birthdate)) as age
  6  from employees;

       AGE
----------
         8

SQL>
jfgube3f

jfgube3f3#

你可以从SYSDATE中减去MAX(生日)--结果是天数,所以你应该把天转换成年。

WITH 
    tbl AS 
        (
            select 
                to_date('09-09-1965', 'dd-mm-yyyy') birthdate,
                SYSDATE my_sysdate
            from   dual
        )
SELECT FLOOR((my_sysdate - MAX(birthdate))/ 365) "YEARS_OLD" From tbl

  YEARS_OLD
-----------
         57

相关问题