Oracle SQL CASE WHEN ORA-00932:不一致的数据类型:预期CHAR得到NUMBER 00932. 00000 - “不一致的数据类型:预期%s得到%s”

时间:2014-10-31 15:54:16

标签: sql oracle oracle-sqldeveloper case-when

获取错误

ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent datatypes: expected %s got %s"

当我运行以下查询时

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else t.amount END AMOUNT,
FROM table t

如果我用else输出的数字或文本运行它,就像这样,它可以工作。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then '0' 
else 'xxx' END AMOUNT,
FROM table t

5 个答案:

答案 0 :(得分:6)

使用0代替'0'。金额是一个数字,数字没有引用。

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else t.amount END AMOUNT,
FROM table t

答案 1 :(得分:2)

除了@RADAR的回答,

错误的原因是t.amount字段是NUMBER数据类型,而不是string

您的CASE表达式在内部尝试将STRING放入NUMBER数据类型。

正如RADAR的回答中所建议的,使用零作为数字而不是字符串。

答案 2 :(得分:1)

我从这里[https://stackoverflow.com/questions/29803977]

获得了针对此问题的解决方案

答案如下:

Blockquote 看来Oracle要求CASE结构将所有THEN表达式的类型与第一个THEN之后的表达式的TYPE保持一致。 不执行任何类型转换。

这是简短的错误原因。基本上,您在第一个THEN部分之后提到的值的数据类型必须在相同级别的所有后续THEN中都相同。

答案 3 :(得分:0)

尝试使用to_number(t.amount)

SELECT distinct 
CASE when t.cancelled = 'TRUE' then 0 
else to_number(t.amount) END AMOUNT,
FROM table t

答案 4 :(得分:0)

我无法将字符串值转换为数字,因此我使用TO_CHAR函数将数字转换为字符串。