Oracle日期函数

时间:2009-10-27 07:19:53

标签: oracle where clause

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

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

4 个答案:

答案 0 :(得分: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');

答案 1 :(得分: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')

答案 2 :(得分:1)

您应该使用Oracle的函数将字符串正确转换为使用

的日期
to_date('12-MAR-08', 'DD-MMM-YY')

然后,您必须考虑Oracle“Date”数据类型还包含最近的秒的时间信息。这意味着在第一步中构建的日期实际上是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列转移到一个带有to_char(upd_time, 'DD-MMM-YY')的正确字符字段),但通常建议你要查找的数据类似于你在数据库因此增加了使用索引进行查找的机会。

答案 3 :(得分: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';