从sql中的表中减去两个日期
Posted
技术标签:
【中文标题】从sql中的表中减去两个日期【英文标题】:subtract two dates from a table in sql 【发布时间】:2015-06-05 07:58:31 【问题描述】:我有一张表格,上面有一些员工的出生日期。如何找到两名员工之间的年龄差异?
【问题讨论】:
表结构呢? 您好,您已将其标记为 oracle 和 PLSQL,但标题显示为 mysql 【参考方案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 过程成功完成。
【讨论】:
您可以使用两行从 BEGIN 块中的表中选择日期。 --select trunc(date_column) into dob1 where emplid = 101 from table_name; --select trunc(date_column) into dob2 from where emplid = 102 table_name;【参考方案2】:在 Oracle 中减去两个 date
列将导致天数差异,您可以将其除以 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
【讨论】:
如果我也想要月份和天数的差异,我该怎么办? @user3803989 在最新答案中回答以上是关于从sql中的表中减去两个日期的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MS SQL 表中具有 MM/DD/YYYY 日期的单个列中减去