2011-04-27 61 views
1

我用下面的SQL語句的工作,似乎無法得到正確的語法:「?」比較SQL DATE至NUMBER

idSelectQuery=Select "numberprgn" 
       from "SMT1"."CM3R1M1" 
       where "category" != 'KM Document' 
      AND ("sysmodtime" - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 > ? 

凡是當前系統時間的數字 - 這實際上是時代的時間。

該語句失敗的原因爲:

ORA-00932:不一致的數據類型:預期數量得到DATE

我需要能夠給sysmodtime比較的?雖然我無法想出一個辦法來正確地做到這一點......我不知道我是否可以將sysmodtime轉換爲char,然後轉換爲數字,因爲我知道無法直接將日期轉換爲數字。

任何人有任何建議讓這個工作?

感謝

+2

是什麼「sysmodtime」的數據類型?甲骨文正在那裏修改日期。 – 2011-04-27 19:09:07

回答

4

我懷疑你想

"sysmodtime" > TO_DATE('1970-01-01', 'YYYY-MM-DD') + (?/ 86400000) 

假設?表示自1970年1月1日以來的毫秒數。以這種方式編寫查詢可以在「sysmodtime」上使用索引。

現在,實事求是,你可能想創建一個函數,它接受一個數字的時間,並將其轉換爲日期,即

CREATE FUNCTION epoch_to_date(p_epoch IN NUMBER) 
    RETURN DATE 
IS 
BEGIN 
    RETURN TO_DATE('1970-01-01', 'YYYY-MM-DD') + (p_epoch/ 86400000); 
END; 

,你可以在查詢調用

"sysmodtime" > epoch_to_date(?)