oracle sql日期比较不能按预期工作

mno*_*tka 2 sql oracle select oracle-sqldeveloper

我有一个带有'insert_date'列的表格X. 此列为od类型DATE,并且只包含所有记录的一个值:"17-JAN-13".我希望以下查询根本不返回任何结果:

SELECT insert_date
FROM X
  WHERE ("X"."INSERT_DATE" IS NOT NULL
  AND NOT (("X"."INSERT_DATE" = to_date('2013-01-17', 'yyyy-mm-dd')
  )))
Run Code Online (Sandbox Code Playgroud)

但我得到的却是很多"17-JAN-13"的记录.我的查询有什么问题?

a_h*_*ame 8

Oracle DATE列也包含时间(尽管它们的名称).您现有的行可能有一个不同的时间00:00:00("分配"到您使用该to_date()函数创建的日期).

您需要使用"删除"列的时间部分 trunc()

AND NOT (trunc(X.INSERT_DATE) = to_date('2013-01-17', 'yyyy-mm-dd'))
Run Code Online (Sandbox Code Playgroud)

虽然我更愿意使用<>而不是NOT运营商:

AND (trunc(X.INSERT_DATE) <> to_date('2013-01-17', 'yyyy-mm-dd'))
Run Code Online (Sandbox Code Playgroud)

(但这只是个人偏好.我认为它使条件更容易阅读).

所以你的完整陈述将是:

SELECT insert_date
FROM X
  WHERE trunc(X.INSERT_DATE) <> to_date('2013-01-17', 'yyyy-mm-dd')
Run Code Online (Sandbox Code Playgroud)