首页 > 解决方案 > 在 oracle 中比较日期

问题描述

我想比较 oracle 中两个不同表中的两个日期。

如果两个日期相等,那么我应该打印日期相等。如果日期不相等,那么我想将值插入到其他表中。

假设有两个表,即 AAA 和 BBB

表 AAA:-

In_Date
2021-09-08 15:30:00

表 BBB:-

In_Date
2021-09-08 16:00:00

表 BBB 中的日期可以是日期,也可以为空。

下面是我写的查询,

SET SERVEROUTPUT ON;
DECLARE
    aaa_date date;
    bbb_date date;
    emp_join date;
BEGIN
    select in_date into aaa_date from aaa;
    select in_date into bbb_date from bbb;
    if (aaa_date = bbb_date) then
    DBMS_OUTPUT.PUT_LINE('EQUALS'); 
    else
    insert into emp_table values (aaa_date, bbb_date);
    end if;
END;

上面的查询不是比较日期,以及如果 aaa 表中有日期但 bbb 表中有空值,如何比较。

标签: oracleplsqloracle11goracle10g

解决方案


基本上,您不需要 PL/SQL 进行这样的比较;如果两个表只包含一行,你可以

SQL> with
  2  aaa (in_date) as
  3    (select to_date('2021-09-08 15:30:00', 'yyyy-mm-dd hh24:mi:ss') from dual),
  4  bbb (in_date) as
  5    (select to_date('2021-09-08 16:00:00', 'yyyy-mm-dd hh24:mi:ss') from dual)
  6  --
  7  select case when a.in_date = nvl(b.in_date, sysdate) then 'equal'
  8              else 'different'
  9         end result
 10  from aaa a cross join bbb b;

RESULT
---------
different

SQL>

注意第 7 行和NVL函数,以防bbb表中不包含in_date列中的值。


推荐阅读