2011-08-29 40 views
1

下面是一個簡單的查詢:無益Oracle錯誤信息:有望%S,拿到%S使用TO_DATE

SELECT COUNT(*) FROM m_bug_t 
WHERE date_submitted BETWEEN TO_DATE('2011-08-22','yyyy-mm-dd') AND TO_DATE('2011-08-29','yyyy-mm-dd') 
AND status != 100 

給出以下錯誤消息

ORA-00932: inconsistent datatypes: expected NUMBER got DATE 
00932. 00000 - "inconsistent datatypes: expected %s got %s" 
*Cause:  
*Action: 
Error at Line: 2 Column: 22 

任何想法?我習慣於使用MySQL,即使沒有to_date函數,它也能工作。

+0

什麼類型是'data_submitted'列? – skaffman

+0

你是對的。這是一個NUMBER(10,0)。有任何解決這個問題的方法嗎?您必須能夠將其轉換爲Oracle中的日期嗎?它是一個整數,從1970年的秒數或類似的東西... – ale

+0

我不認爲甲骨文提供任何方式來將millis值轉換爲'DATE'。你將不得不自己轉換該表。爲什麼您將它作爲NUMERIC存儲起始? – skaffman

回答

4

轉換甲骨文日期以Unix時間戳值需要具備以下功能:

SELECT (sysdate - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400) as dt FROM dual; 

或在您的SQL的情況下,where子句:

WHERE date_submitted between 
    ((TO_DATE('2011-08-22', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) 
AND 
    ((TO_DATE('2011-08-29', 'yyyy-mm-dd') - to_date('01-JAN-1970','DD-MON-YYYY')) * (86400)) 
5

它看起來像date_submitted列是數字,你試圖比較它與日期。 Oracle不會讓你這樣做。

[編輯:]假設Epoch是1970年1月1日,你應該能夠使用:

TO_DATE('01/01/1970 00:00:00', 'MM-DD-YYYY HH24:MI:SS') + (date_submitted/(24 * 60 * 60)) 

要獲得表示實際日期。我不確定這是否100%準確,因爲你在幾秒內的日期可能不包括閏秒和甲骨文的可能。

+0

你說得對。這是一個NUMBER(10,0)。有任何解決這個問題的方法嗎?您必須能夠將其轉換爲Oracle中的日期嗎?它是一個整數,從1970年的秒數或類似的東西...... – ale