oracle情况然后ora-00932:不一致的数据类型:期望的char得到了数字

时间:2014-02-28 08:31:01

标签: oracle

我试着做一些公式计算,如下所示

( CASE
WHEN X <= 0.04 THEN X
WHEN X > 0.04 AND X <= 0.05 THEN TO_CHAR(X-0.010, '9,999,999.99')
WHEN X > 0.05 AND X <= 0.07 THEN TO_CHAR(X-0.020, '9,999,999.99')
WHEN X > 0.07 AND X <= 0.120 THEN TO_CHAR(X-0.030, '9,999,999.99')
WHEN X > 0.12 AND X <= 0.150 THEN TO_CHAR(X-0.040, '9,999,999.99')
ELSE TO_CHAR(X -0.05, '9,999,999.99') 
END
)

使用值

0.45
-0.01

当我使用上面的查询时,我将通过公式

后得到以下结果
.35
-0.01

它将0.35更改为char并且缺少前导零。 有没有办法可以保留0?如果我不改变角色,我会期望char得到数字。

1 个答案:

答案 0 :(得分:0)

在第二行中,返回数字数据类型

WHEN X <= 0.04 THEN X

而在其他行上返回char数据类型

WHEN X > 0.04 AND X <= 0.05 THEN TO_CHAR(X-0.010, '9,999,999.99')

每次都必须使用相同的数据类型。因此,如果您将第二行更改为

WHEN X <= 0.04 THEN to_char(X, '9,999,999.99')

它应该有用。

如果你想要一个前导零,你可以使用这个格式字符串:

to_char(X, '9,999,990.99')

A 9表示省略尾随零,而0表示返回前导零。见http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements004.htm#SQLRF00210