2015-06-05 9 views
1

У меня есть таблица с датой рождения некоторых сотрудников. Как найти разницу в возрасте между двумя сотрудниками?вычесть две даты из таблицы в sql

+0

А как насчет структуры таблиц? – hkutluay

+2

Привет, вы отметили это как оракул и PLSQL, но в названии говорится, что mysql – davegreen100

ответ

0

Вычитание двух date столбцов в Oracle приведет к разнице в дни, которые вы могли бы разделить на 365, чтобы получить разницу в годах:

SELECT  FLOOR(ABS((d1 - d2)/365)) AS age_diff 
FROM  (SELECT dob AS d1 
      FROM employee 
      WHERE empId = 'some_id') t1 
CROSS JOIN (SELECT dob AS d2 
      FROM employee 
      WHERE empId = 'some_other_id') t2 
+0

работает отлично. – BinaryTerror

+0

Что делать, если я хочу разницу в месяцах и днях? – BinaryTerror

+0

@ user3803989 ответил в последнем ответе –

1

Вы можете попробовать ниже, чтобы получить дни, месяцы и годы между двумя датами.

DECLARE 

dob1 date := TO_DATE('11-17-2015','MM-DD-YYYY'); -- change your dates here 
dob2 date := TO_DATE('11-18-2012','MM-DD-YYYY'); 
v_years varchar2(100); 
v_months varchar2(100); 
v_days varchar2(100); 

BEGIN 

select (abs(dob1 - dob2)) into v_days from dual; 
DBMS_output.put_line('DAYS : ' || v_days); 

select floor(abs(dob1 - dob2)/365) into v_years from dual; 
DBMS_output.put_line('YEARS : ' || v_years); 

select floor(abs(dob1 - dob2)/365*12) into v_months from dual; 
DBMS_output.put_line('MONTHS : ' || v_months); 


END; 
/

ВЫВОД:

ДНЕЙ: 1094
ЛЕТ: 2
МЕСЯЦЕВ: 35

PL процедура/SQL успешно завершена.

+0

Вы можете использовать две строки для выбора дат из таблицы в блоке BEGIN. - выберите trunc (date_column) в dob1, где emplid = 101 из table_name; - выберите trunc (date_column) в dob2, откуда emplid = 102 table_name; –

Смежные вопросы