2012-04-18 83 views
4

在蟾蜍編輯器,我有這個SQL:Oracle/Toad期望的日期格式是什麼?

SELECT INTERLOPERABCID,AVAILABLEDATE, 
AVAILABLEQHR,CARPHONEID, 
TRUNC((AVAILABLEQHR-1)/12) "COL", 
MOD(AVAILABLEQHR-1,12) "ROW" 
FROM ABC.INTERLOPERAVAILABILITY 
WHERE INTERLOPERABCID>42 
AND AVAILABLEDATE='09/Apr/2012' 

...但它不返回任何行,即使我看到他們AVAILABLEDATE值表中多條記錄=「2012年4月9日」

日期格式('09/Apr/2012';我也試過'04/Sep/2012')看起來很奇怪,但至少我沒有得到任何編譯/執行錯誤。當我嘗試「4/9/2012」和「2012年4月9日」時,它說「ORA-01853:不是有效的月份」

如何輸入日期以告訴它我想查看4月2012年9月?

+1

日期格式取決於NLS_DATE_FORMAT的設置,這取決於NLS_TERRITORY。兩者都可以是會話特定的。永遠不要依賴'默認'dateformat,在to_date函數中使用適當的日期掩碼。 – 2012-04-18 19:40:27

回答

8

最安全的使用TO_DATE:

AND AVAILABLEDATE = TO_DATE('09/Apr/2012', 'DD/Mon/YYYY') 
5

我喜歡用date literal

SELECT INTERLOPERABCID,AVAILABLEDATE, 
AVAILABLEQHR,CARPHONEID, 
TRUNC((AVAILABLEQHR-1)/12) "COL", 
MOD(AVAILABLEQHR-1,12) "ROW" 
FROM ABC.INTERLOPERAVAILABILITY 
WHERE INTERLOPERABCID>42 
AND AVAILABLEDATE = DATE '2012-04-09' 

你肯定有你的日期沒有時間的一部分?

+0

數據類型爲「日期」,並且該數據庫中沒有顯示該列的時間元素。 – 2012-04-18 19:39:52

+0

這兩個答案都有效,所以選擇哪一個作爲「答案」就是投了。 – 2012-04-18 19:44:17

+0

這是非常不尋常的,你必須在日期前加上DATE類型說明符。我從來沒有料到它,因爲我認爲oracle會足夠聰明來施放它,或者像sql server那樣。 – t3chb0t 2016-03-02 07:28:40