我尝试了以下查询:
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 点之间的范围,不在给定范围内。