从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 日期的单个列中减去

SQL - 为表中的每个货币代码(在两个定义的日期之间)创建一个具有唯一日期和货币记录的表

从 Sql 中的表中选择不同的日期间隔

从其他日期时间范围(T-SQL)中减去日期时间范围

如何使用间隔 1 分钟在两个日期之间将时间序列数据生成到 Oracle PL/SQL 中的表中?