0

我正在执行以下查询,它返回空白行。但是表中有记录具有 upd_time = '12-MAR-08'。我不明白为什么它没有返回日期 '12-MAR-08 '.请帮帮我??

从 BANKREC.br_data 中选择 br_data.upd_time,其中 br_data.upd_time = '12-MAR-08';

4

4 回答 4

2

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');
于 2009-10-27T15:36:05.513 回答
1

如果你做一个是一样的吗

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')

于 2009-10-27T07:25:27.960 回答
1

您应该使用 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')),但通常建议使您要查找的数据与您在数据库中可以找到的数据相似,因为这会增加您使用的机会查找的索引。

于 2009-10-27T20:53:44.560 回答
0

我目前无法访问 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';
于 2009-10-27T07:25:52.497 回答