我总是对ORACLE SQL查询中的日期格式感到困惑,并且花费几分钟一起去谷歌,有人可以解释一下,当我们在数据库表中有不同的日期格式时,最简单的解决方法是什么?
例如,我有一个日期列为ES_DATE,数据为27-APR-12 11.52.48.294030000 AM数据类型TIMESTAMP(6)WITH LOCAL TIME ZONE。
我编写了一个简单的select查询来获取该特定日期的数据,但它没有返回任何内容。有人可以解释一下吗?
select * from table
where es_date=TO_DATE('27-APR-12','dd-MON-yy')
或
select * from table where es_date = '27-APR-12';
答案 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';