比较2个日期字段-当一个日期字段为null时

时间:2019-09-26 14:08:01

标签: oracle

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

Function

此返回ORA-01843:不是有效的月份错误。

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

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

谢谢

3 个答案:

答案 0 :(得分:0)

SYSDATE是DATE值。在已经为TO_DATE()的值上使用DATE是没有用的。

尝试

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

答案 1 :(得分:0)

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

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)

干杯!

答案 2 :(得分:0)

首先,您不需要任何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