我在Oracle存储过程中使用了以下查询,在该过程中,我得到了以下错误
ORA-00932: inconsistent datatypes: expected NUMBER got DATE.
day_id列是数字数据类型,数据存储在此列中,例如20110822
; ltds列是日期数据类型,值存储在此列中,例如08-AUG-17
。这两列都存储实际日期。
在我的存储过程中,我把这个查询放在变量中,如下所示:
NESS_QUERY:= select t.day_id from M_TIME t
where TO_DATE (t.day_id, ''YYYYMMDD'') < trunc('''||LTDS||''') and
TO_DATE (t.day_id, ''YYYYMMDD'') >= trunc(sysdate, ''mm'') - case trunc('''||LTDS||''') when trunc(sysdate, ''mm'') then 1 else 0 end;
DBMS_OUTPUT.PUT_LINE (NESS_QUERY);
DBMS_OUTPUT.PUT_LINE的输出如下所示:
select t.day_id from M_TIME t
where TO_DATE (t.day_id, 'YYYYMMDD') < trunc('15-DEC-17') and
TO_DATE (t.day_id, 'YYYYMMDD') >= trunc(sysdate, 'mm') - case trunc('15-DEC-17') when trunc(sysdate, 'mm') then 1 else 0 end
型
4条答案
按热度按时间busg9geu1#
如果您对该列的数据类型选择有任何影响,请将其更改为DATE数据类型。这将使事情(如您试图运行的查询)变得更容易。
由于您的列当前不是DATE数据类型,因此如果要将该列的内容与日期进行比较,则需要通过
to_date()
沿着适当的格式掩码转换该列。在您的情况下,格式掩码看起来是yyyymmdd
。因此,您的查询应该是这样的:
u5rb5r592#
在引起错误的条件下,
day_id是数字,trunc(sysdate,'mm')返回日期数据类型
qacovj5a3#
在比较之前,应使用
TO_DATE
将day_id
转换为date
EDIT:您不需要在查询中使用
ldts
变量,您可以保存它并在其他地方使用它,但对于查询,您可以从cte定义它并重用它。tyg4sfes4#