我在DB2中有一个varchar字段AMOUNT
。
可能的表状态值:
ID AMOUNT
-------------------------
1 123.4578
2 NULL
2 123.78
1 -8562.85441
2
1 0.0
-------------------------
列AMOUNT
可以为空,如上面第二行描述的那样。
我希望在查询中按SUM
对AMOUNT
个ID
组进行操作。
结果SUM应为DECIMAL(16,2)。
考虑到该值可以为空且为空以及十进制之后的位数不遵循任何固定格式,这样做的正确方法是什么?
这是this question的副本,但给出的答案并不完整,也未被接受。
感谢阅读!
答案 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)