如何比较oracle数据库中的两个日期

问题描述

我正在尝试使用 sql 查询根据表中的日期从表中选择行: SELECT * FROM users WHERE date1 = TO_DATE('01/01/2020','MM/DD/YYYY')。出于某种原因,此查询仅适用于某些日期,但不适用于所有日期,我不知道为什么。显示日期时,格式看起来像“01/01/2020 12:00:00 AM”,但我尝试操纵 TO_DATE() 函数来考虑时间,但它仍然没有改变结果。任何帮助将不胜感激,如果有帮助,一些有效的日期是:“01/01/2001”和“01/01/2000”。

数据:

Does not Work

7/1/2000 12:00:00 AM | 7/31/2000 12:00:00 AM | 1
7/1/2000 12:00:00 AM | 7/31/2000 12:00:00 AM | 2
7/1/2000 12:00:00 AM | 7/31/2000 12:00:00 AM | 3
7/1/2000 12:00:00 AM | 7/31/2000 12:00:00 AM | 4
7/1/2000 12:00:00 AM | 7/31/2000 12:00:00 AM | 5
2/1/2000 12:00:00 AM | 2/31/2000 12:00:00 AM | 1
2/1/2000 12:00:00 AM | 2/31/2000 12:00:00 AM | 2
2/1/2000 12:00:00 AM | 2/31/2000 12:00:00 AM | 3
2/1/2000 12:00:00 AM | 2/31/2000 12:00:00 AM | 4
2/1/2000 12:00:00 AM | 2/31/2000 12:00:00 AM | 5

Works

1/1/2001 12:00:00 AM | 1/31/2001 12:00:00 AM | 1
1/1/2001 12:00:00 AM | 1/31/2001 12:00:00 AM | 2
1/1/2001 12:00:00 AM | 1/31/2001 12:00:00 AM | 3
1/1/2001 12:00:00 AM | 1/31/2001 12:00:00 AM | 4
1/1/2001 12:00:00 AM | 1/31/2001 12:00:00 AM | 5
1/1/2000 12:00:00 AM | 1/31/2000 12:00:00 AM | 1

解决方法

可能是因为 date1 列也包含时间分量。

尝试截断它:

where trunc(date1) = to_date('01/01/2020','mm/dd/yyyy')
,

如果您想从 DATE 列中选择 一天 的数据,该列可以包含一个 tiem 组件,请使用

SELECT * FROM users WHERE date1 >= DATE'2020-01-01' and date1 < DATE'2020-01-02'

使用 TRUNC 的细微差别在于您可以在适当的情况下使用索引访问