Oracle SQL CASE WHEN ORA-00932:不一致的数据类型:预期的CHAR得到了编号00932.00000-“不一致的数据类型:预期的%s得到了%s”

xkrw2x1b  于 2023-04-20  发布在  Oracle
关注(0)|答案(5)|浏览(400)

获取错误
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
lstz6jyr

lstz6jyr1#

使用0而不是'0'。金额是一个数字,数字不带引号。

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

0sgqnhkj2#

除了@RADAR的回答
错误的原因是t.amount字段是NUMBER数据类型,而不是string
您的CASE表达式在内部尝试将STRING放入NUMBER数据类型中。
正如在RADAR的回答中已经建议的那样,使用零作为数字,而不是作为字符串。

mwyxok5s

mwyxok5s3#

我从这里得到了这个问题的解决方案ORA-00932: inconsistent datatypes: expected CHAR got NUMBER while adding 1 to a date
正如答复所述:
看起来Oracle要求CASE结构的所有THEN表达式的类型与第一个THEN之后的表达式的TYPE一致。不执行类型转换。
这是短和错误的原因.基本上,你提到的第一个THEN部分后的值的数据类型必须是相同的,在所有相同级别的以下THEN.

yb3bgrhw

yb3bgrhw4#

尝试使用to_number(t.amount)

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

8tntrjer5#

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

相关问题