Oracle错误信息:期望%s,使用to_date得到%s



下面是一个简单的查询:

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函数也能正常工作。

看起来date_submitted列是数字,而您试图将其与日期进行比较。Oracle不会让你这么做的。

[EDIT:]假设纪元是1970年1月1日,你应该能够使用:

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

获取所表示的实际日期。我不确定这是否会100%准确,因为以秒为单位的日期可能不包括闰秒,而Oracle的日期可能包含闰秒。

将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))

最新更新