当我尝试执行下面的查询时,出现错误:
ORA-00932不一致的数据类型预期 char 得到数字
select (case when upper (TEXT) <> lower (TEXT) then 'INVALID'
else sum(TEXT)
end)
from CLASS
where SECTION = 'SEVENTH'
当我在 ELSE 条件中删除 SUM 时查询工作正常> 但我需要对文本求和以达到预期结果。
您不能对字符值求和,并且 CASE 语句中的所有返回值必须是相同的数据类型。
如果您使用 TO_CHAR() 将您的 SUM 转换为字符,这仍然无法正常工作,因为您没有正确分组,请参阅此SQL Fiddle。
最简单的方法是返回一个 0 而不是'INVALID'
,对整个 case 语句求和,然后将其更改回'INVALID'
如果它是 0。这不太一样......不要在字符列中存储数字?
select case when a = 0 then 'INVALID'
else to_char(a)
end
from ( select sum( case when upper(txt) <> lower(txt) then 0
else to_number(txt)
end ) as a
from class )
这是一个要演示的SQL Fiddle 。
好吧,你不能SUM
发短信,对吧?这就是为什么当您从CASE
. 您是否尝试过使用to_number
要求和的值?