2012-09-04 139 views
1

我正在使用oracle表来提取数据。在其中一个查询中,我使用'where'来过滤日期。Oracle日期格式错误

To_Date(VDATU,'DD-MON-YYYY') >= '03-Jun-2012' 
AND To_Date(VDATU,'dd-mon-yy') <= '04-Sep-2012' 

我得到错误,

ORA-01861: literal does not match format string 

我使用( 'DD-MM-YY'),但仍是给予同样的错误尝试。有什么问题?

+0

由于To_Date调用或由于字符串的隐式转换(例如''03 -Jun-2012'')而导致日期错误。 –

回答

2

您正试图将VDATU(推测为VARCHAR2)转换为日期。

在一个地方你有DD-MON-YYYY和在其他你有dd-mon-yy

这是哪一个? VDATU不能同时适用于两者。

+0

是的,它是varchar2。它的格式是'01122011'。什么是用于转换的正确格式? – Olivarsham

+0

你的例子不明确,但是'ddmmyyyy'(12月1日)或'mmddyyyy'(1月12日)。 –

2

你要比较一个DATEString,尝试改为:

To_Date(VDATU,'DD-MON-YYYY') >= To_Date('03-JUN-2012','DD-MON-YYYY') 
AND To_Date(VDATU,'dd-mon-yy') <= To_Date('04-SEP-2012','DD-MON-YYYY') 

如果VDATU已经是一个日期,你不应该将它转换to_date,所有你需要做的是:

VDATU >= To_Date('03-JUN-2012','DD-MON-YYYY') 
AND VDATU <= To_Date('04-SEP-2012','DD-MON-YYYY')