【问题标题】:Compare 2 date fields - when one date field is null比较 2 个日期字段 - 当一个日期字段为空时
【发布时间】:2020-01-26 20:12:54
【问题描述】:

我想选择日期大于上次处理日期的行。 最后处理的日期在历史表中。

select id
from table1 
where to_date(last_updated_date,'MM/DD/YYYY HH24:MI:SS') 
              > select to_date(nvl(max(last_updated_date),sysdate),'MM/DD/YYYY HH24:MI:SS')
                from table1_hist;

这返回 ORA-01843: not a valid month 错误。

我在 table1 中手动插入行作为 TO_DATE('09/26/2019 14:37:49', 'MM/DD/YYYY HH24:MI:SS') 而在 table1_hist 中没有行。 但是当我使用 sql developer 查询 table1 的表时,我得到的值显示为“26-SEP-19”。 last_updated_date 是一个日期字段。

我想在上次执行时间之后从 table1 中获取 id。

谢谢

【问题讨论】:

    标签: oracle


    【解决方案1】:

    SYSDATE 是一个日期值。对已经是 DATE 的值使用 TO_DATE() 是没有用的。

    试试

    where last_updated_date >
           (select MAX(NVL(last_updated_date, SYSDATE)) from table1_hist);
    

    【讨论】:

    • 它返回空。我猜是因为 table1.last_update_date 的时间戳小于 sysdate。我可以转换为日期并仅检查 dd/mm/yy,在这种情况下,相等条件将得到满足
    • 我试过 where last_updated_date >= (select MAX(NVL(last_updated_date, SYSDATE)) from table1_hist);
    【解决方案2】:

    我建议使用如下分析函数:

    SELECT
        ID
    FROM
        (
            SELECT
                T.ID,
                T.LAST_UPDATED_DATE,
                MAX(TH.LAST_UPDATED_DATE) OVER() AS M_LAST_UPDATED_DATE
            FROM
                TABLE1 T
                JOIN TABLE1_HIST TH ON ( T.ID = TH.ID ) 
                -- i am guessing that this is the join condition or you can use your own conition here
        )
    WHERE
        LAST_UPDATED_DATE > COALESCE(M_LAST_UPDATED_DATE, SYSDATE)
    

    干杯!!

    【讨论】:

    • 为什么这是他的问题的解决方案?
    • 这是实现相同结果的另一种方式。
    【解决方案3】:

    首先,您不需要任何 to_date 转换来进行比较。

    如果 table1_hist 至少有一个非空值,那么使用

    select t.id
      from table1 t
     where t.last_updated_date > ( select max(th.last_updated_date) from table1_hist th )
    

    足够了,但是所有这些值都是空的,然后使用这样的查询:

    select t.id
      from table1 t
     where t.last_updated_date > 
     (select nvl(max(th.last_updated_date),t.last_updated_date-1) from table1_hist th)
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 2020-12-16
      • 2013-08-09
      • 1970-01-01
      • 2010-10-24
      • 2015-12-01
      • 2014-09-28
      相关资源
      最近更新 更多