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

SELECT br_data.upd_time FROM BANKREC.br_data 其中br_data.upd_time = '12 -MAR-08';

有帮助吗?

解决方案

我目前无法访问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';

其他提示

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

还有其他方法可以为这只猫设置外观(你可以使用 to_char(upd_time,'DD-MMM-YY')将updTime列转移到正确的字段,但通常建议使用您正在寻找的数据类似于您在数据库中可以找到的数据,因为这会增加您使用索引进行查找的机会。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top