我正在执行以下查询,它返回空白行。但是表中有记录具有 upd_time = '12-MAR-08'。我不明白为什么它没有返回日期 '12-MAR-08 '.请帮帮我??
从 BANKREC.br_data 中选择 br_data.upd_time,其中 br_data.upd_time = '12-MAR-08';
upd_time 可能不完全是 12-MAR-08。日期格式没有显示时间组件,但它可能存在(Oracle 中的 DATE 数据类型可以同时包含日期和时间组件)。
试试这个(它可以让你看到时间组件):
alter session set nls_date_format='DD-MON-YY HH24:MI:SS';
SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');
如果你做一个是一样的吗
SELECT br_data.upd_time FROM BANKREC.br_data
where trunc(br_data.upd_time) = '12-MAR-08';
可能 upd_time 不是日期,而是时间戳,因此它实际上包含例如 '12-MAR-08 05:30' 这不是同一件事。trunc()
删除时间戳的时间部分。
由于它不返回错误,我假设它正确解析日期,否则你可以尝试to_date('12-MAR-08','DD-MON-YY')
您应该使用 Oracle 的函数将您的字符串正确转换为日期,使用
to_date('12-MAR-08', 'DD-MMM-YY')
然后您必须考虑到 Oracle“日期”数据类型还包含最接近秒的时间信息。这意味着在第一步中构建的日期实际上是 3 月 12 日午夜。所以你必须确保 upd_time 被截断到午夜:
trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')
您的完整查询变为
SELECT br_data.upd_time
FROM BANKREC.br_data
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');
还有其他方法可以给这只猫剥皮(您可以使用 将 updTime 列转移到适当的 char 字段to_char(upd_time, 'DD-MMM-YY')
),但通常建议使您要查找的数据与您在数据库中可以找到的数据相似,因为这会增加您使用的机会查找的索引。
我目前无法访问 oracle 数据库,但我记得使用 to_char。
尝试
SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';