1

簡単なクエリを次に示します。

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

何か案は?to_date関数がなくてもこれが機能するMySQLの使用に慣れています。

4

2 に答える 2

5

列が数値のようでdate_submitted、日付と比較しようとしています。オラクルはあなたにこれをさせません。

[編集:]エポックが 1970 年 1 月 1 日であると仮定すると、以下を使用できるはずです。

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

表示される実際の日付を取得します。秒単位の日付にはうるう秒が含まれていない可能性があり、Oracle には含まれている可能性が高いため、これが 100% 正確かどうかはわかりません。

于 2011-08-29T16:39:16.473 に答える
4

Oracle 日付を 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))
于 2011-08-29T16:59:37.227 に答える