2011-07-07 51 views
1

在Oracle中,列類型= DATE的表中有一列(dateColumn),當我執行select * from table.時,特定記錄的值顯示爲'10/03/2010' 現在,當我這樣做:Oracle查詢不能正確顯示日期

SELECT * 
    FROM table 
WHERE dateColumn < '01-JAN-11' 

什麼也不顯示。當我這樣做時:

SELECT * 
    FROM table 
WHERE dateColumn > '01-JAN-11' 

記錄顯示出來。 這是爲什麼這樣表現? 「10/03/2010」是10日2010年3月,以便清楚,是2011 < 01一月

+0

我發現通過以下命令設置我想要的特定日期格式nls_date_format ='mm/dd/yyyy' – dave

回答

7

目前還沒有確切的日期格式 - 它可以是按區域不同甚至業務。這甚至不考慮SQL現實...

在Oracle中,作爲一個日期,需要您使用TO_DATE function評估字符串的方法:

SELECT * 
    FROM table 
WHERE dateColumn > TO_DATE('01-JAN-11', 'DD-MON-YY') 

您需要提供格式掩碼指示Oracle如何解釋你提供的日期。

該功能在其他數據庫中經常不同,但體驗是相同的。大多數數據庫接受'YYYY-MM-DD'來將字符串隱式轉換爲日期。顯式轉換是在您使用函數時,如TO_DATE顯式更改數據類型。

+0

+1對於說教的回答 –

+0

謝謝。如果sql在函數內部,我們需要調用函數,將日期作爲輸入傳遞,但它不適用於我。所以我這樣做:SELECT * FROM table WHERE dateColumn> TO_DATE(inputDate,'DD-MON-YY');我稱之爲傳遞輸入日期。它給我的語法錯誤 – Victor

+2

@Kaushik:參數'inputDate'的數據類型是什麼?我打賭它是'DATE',這不是你問的問題。我永遠不會明白爲什麼人們認爲隱藏細節是一個好主意...... –

1

嘗試使用TO_DATE:

select * from table where dateColumn < to_date('01-JAN-11', 'dd-MON-YY') 
+1

將「mm」更改爲「MON」,因爲「mm」用於數字月份。 –