获取错误
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
答案 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函数将数字转换为字符串。