日期格式的Oracle SQL查询

时间:2013-07-04 21:48:11

标签: sql database oracle oracle11g

我总是对ORACLE SQL查询中的日期格式感到困惑,并且花费几分钟一起去谷歌,有人可以解释一下,当我们在数据库表中有不同的日期格式时,最简单的解决方法是什么?

例如,我有一个日期列为ES_DATE,数据为27-APR-12 11.52.48.294030000 AM数据类型TIMESTAMP(6)WITH LOCAL TIME ZONE。

enter image description here

我编写了一个简单的select查询来获取该特定日期的数据,但它没有返回任何内容。有人可以解释一下吗?

select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')

select * from table where es_date = '27-APR-12';

3 个答案:

答案 0 :(得分:41)

to_date()返回00:00:00的日期,因此您需要从您比较的日期“删除”分钟:

select * 
from table
where trunc(es_date) = TO_DATE('27-APR-12','dd-MON-yy')

您可能希望在trunc(es_date)上创建索引,如果这是您定期进行的操作。

如果将默认日期格式更改为任何不同的日期格式,则文字'27-APR-12'可能会非常容易失败。因此,请确保始终使用to_date()使用正确的格式掩码(或ANSI文字:date '2012-04-27'

尽管您使用to_date()并且不依赖于隐含数据类型转换,但由于格式'dd-MON-yy',您对to_date()的使用仍有一个微妙的缺陷。

使用不同的语言设置,这可能很容易失败,例如当NLS_LANG设置为德语时TO_DATE('27-MAY-12','dd-MON-yy')。避免使用其他语言可能不同的格式。使用四位数年份,仅使用数字,例如'dd-mm-yyyy''yyyy-mm-dd'

答案 1 :(得分:2)

如果您使用相同的日期格式并在oracle中选择查询日期:

   select count(id) from Table_name where TO_DATE(Column_date)='07-OCT-2015';

由oracle提供的To_DATE

答案 2 :(得分:1)

您可以通过获取数据来使用此命令。这将提取您的数据...

select * from employees where to_char(es_date,'dd/mon/yyyy')='17/jun/2003';