2011-03-09 105 views
0

當我做這在Oracle 10g:oracle的to_date函數不接受格式

select to_date(trunc(SOMEINPUTdATE)) from table1 
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY') 
    >= to_date('03/11/2011' ,'MM/DD/YYYY') 

我得到:ORA-01843: not a valid month,如果我更改爲:'YYYY/MM/DD',它的工作原理。 但是'MM/DD/YYYY'是一個有效的格式吧?

回答

7

你會讓事情混亂一點。 TO_DATE將字符串轉換爲DATE。如果date_column_timestamp已經是日期,則不需要將其轉換爲日期。

select trunc(SOMEINPUTdATE) from table1 
where trunc(date_column_timestamp) 
    >= to_date('03/11/2011' ,'MM/DD/YYYY') 

ORA-01843是由日期到字符串的隱式轉換引起的。換句話說,執行以下操作:

to_date(trunc(date_column_timestamp),'MM/DD/YYYY') 

相當於(假設默認的日期格式DD-MON-YYYY):

to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY') 

因此,TO_CHAR回報像'11-MAR-2011',然後使to_date失敗,因爲日期格式不匹配。

select子句中存在同樣的問題。圍繞日期列的trunc,您不需要to_date