在2个日期之间选择值时得到不正确的结果

我正在尝试运行以下查询以选择 2 个日期之间的一些结果,但由于条件不存在,我得到了结果。那么这里有什么问题呢?

select OPEN_TIME, STATUS 
from PROBSUMMARY 
where trunc (open_time) >= '01-01-2020' 
  and trunc (open_time) < '01-01-2021'

回答

您正在将日期与字符串进行比较;日期被转换为字符串以进行比较。从文档:

SELECT FROM操作过程中,Oracle 将列中的数据转换为目标变量的类型。

当您的日期被隐式转换为字符串时,根据字符值比较规则,它们都属于该字符串值范围。

以上当然不是真的。这取代了它:

将字符值与DATE值进行比较时,Oracle 会将字符数据转换为DATE.

因此,在隐式转换中发生了一些奇怪的事情,这取决于您的NLS_DATE_FOPRMAT设置。无论如何,以下建议仍然有效......

将日期与日期进行比较,使用to_date()或使用日期文字转换您的字符串:

where open_time >= date '2020-01-01' and open_time < date '2021-01-01'

您不需要将日期截断到午夜;如果合适,这将有助于能够使用索引。


以上是在2个日期之间选择值时得到不正确的结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>