DB2中的varchar到十进制转换,包含空值和空值

时间:2014-08-11 15:51:06

标签: sql db2

我在DB2中有一个varchar字段AMOUNT

可能的表状态值:

ID            AMOUNT
-------------------------
1             123.4578
2              NULL
2             123.78
1            -8562.85441
2            
1             0.0
-------------------------

AMOUNT可以为空,如上面第二行描述的那样。

我希望在查询中按SUMAMOUNTID组进行操作。

结果SUM应为DECIMAL(16,2)。

考虑到该值可以为空且为空以及十进制之后的位数不遵循任何固定格式,这样做的正确方法是什么?

这是this question的副本,但给出的答案并不完整,也未被接受。

感谢阅读!

2 个答案:

答案 0 :(得分:1)

我认为您想要的代码是:

select (case when amount <> '' then cast(amount as float) end)
from table t;

您不必担心NULL值。 sum()忽略了它们。如果您希望获得0所有值NULL /空白,请将else 0添加到case语句。

如果您担心其他非数字值,可以尝试:

select (case when amount <> '' and
                  translate(amount, '0123456789.', '') = ''
             then cast(amount as float) end)
from table t;

答案 1 :(得分:0)

CAST(CASE WHEN ISNULL(AMOUNT, '') = '' THEN NULL ELSE REPLACE(AMOUNT, ',', '.') END AS DECIMAL (16,2))  AS AMOUNT

CAST (123.4578 AS DECIMAL (16,2))
+ CAST (NULL AS DECIMAL (16,2))
+ CAST (123.78 AS DECIMAL (16,2))
+ CAST (-8562.85441 AS DECIMAL (16,2))

= RESULT DECIMAL(16,2)