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列是数字的,您正在尝试将其与日期进行比较。Oracle 不会让你这样做。

[编辑:] 假设时代是 1970 年 1 月 1 日,您应该能够使用:

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

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

于 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 回答