2012-11-28 46 views
-1

有人能告訴我爲什麼在Oracle中以下查詢被認爲是無效的嗎?Oracle查詢 - 無法弄清楚什麼是錯誤

SELECT TO_CHAR(start_date,'dd/month') 
FROM Table1 
WHERE start_date IN (TO_DATE('JUN 15 12'), TO_DATE('AUG 19 12')); 

這是因爲'dd/month'在合併時被認爲是無效格式嗎?

還是因爲日期不能用IN進行比較?

P.S>此時我無法訪問Oracle數據庫,這就是爲什麼我無法運行sql並得到確切的錯誤。我所知道的是聲明是無效的,我想知道問題是什麼。我是Oracle的新手

+1

我猜你有2個錯誤:'to_char'和'to_date'。兩者對我來說似乎都是無效的,因爲他們要麼使用無效模式要麼完全忽略它。 –

+0

你能更具體嗎? – ElenaDBA

+1

你可以在這裏運行你的SQL:http://sqlfiddle.com –

回答

4

除非您更改了會話/數據庫參數,否則TO_DATE格式應該採用dd-mon-yy格式。 TO_DATE的第二個參數是傳入日期格式。

SELECT TO_CHAR(start_date,'DD/MONTH') 
FROM Table1 
WHERE start_date IN (TO_DATE('JUN 15 2012', 'MON DD YYYY'), TO_DATE('AUG 19 2012', 'MON DD YYYY')); 
+0

對不起,我的壞,它應該已經在WHERE start_date IN(TO_DATE('JUN 15 12'),TO_DATE('AUG 19 12')); – ElenaDBA

+0

沒關係。除非您的默認日期格式(按會話或系統配置)爲「MON DD YY」,否則您需要爲to_date調用提供一種格式 – REW

+0

無論如何,不​​要假設日期格式配置參數只是一種良好的做法。 – REW

0

嘗試提供在TO_DATE方法如下格式:

SELECT TO_CHAR(start_date,'DD/Month') 
FROM Table1 
WHERE start_date IN (
     to_date('JUN 15 2012', 'MON DD YYYY'), 
     to_date('AUG 19 2012', 'MON DD YYYY') 
); 

另外,如果你想使用BETWEEN找到日期範圍下降,那麼所有記錄:

SELECT TO_CHAR(start_date,'DD/Month') 
FROM Table1 
WHERE start_date BETWEEN to_date('JUN 15 2012', 'MON DD YYYY') 
         AND to_date('AUG 19 2012', 'MON DD YYYY'); 
相關問題