TRUNC 函数导致没有返回带有 BETWEEN 和 FULL 数据和时间的记录 - ORACLE



我尝试了以下查询:

SELECT * 
FROM   audit_log 
WHERE  Trunc(query_date) BETWEEN To_date('12-DEC-2013 01:00:00 pm', 
                                 'DD-MON-YYYY HH:MI:SS PM') AND To_date( 
                                        '12-DEC-2013 02:00:00 pm', 
                                        'DD-MON-YYYY HH:MI:SS PM') 

尽管时间范围包含数据,但由于某种原因,查询不会返回任何记录。我在这里检查了一下,我想我正在使用"To_date"功能来遵循建议。

但是,当我删除函数"TRUNC"时,查询工作正常。

SELECT * 
FROM   audit_log 
WHERE  query_date BETWEEN To_date('12-DEC-2013 01:00:00 pm', 
                          'DD-MON-YYYY HH:MI:SS PM') AND To_date( 
                                 '12-DEC-2013 02:00:00 pm', 
                                 'DD-MON-YYYY HH:MI:SS PM') 

我知道"TRUNC"返回日期,并将一天的时间部分截断为格式模型 fmt 指定的单位。但是为什么将此函数与 FULL 日期和时间一起使用不会返回记录?我假设它不会截断任何值,因此它的存在就像不存在一样。我在这里错过了什么吗?

您正在使用没有第二个格式参数的 TRUNC 函数。因此,Oracle 会将您的日期截断为一整天,从而将时间部分设置为 0:00:00 am。

但是,您的 WHERE 条件选择下午 1 点到 2 点之间的时间,任何截断的日期都不满足。

使用Trunc(query_date)将导致12-DEC-2013 00:00:00 am,即午夜,但在您的查询中,您提供了下午 1 点到 2 点之间的范围,不在给定范围内。

最新更新