如何在SSIS表达式中将NULL替换为零?

时间:2013-02-21 14:46:07

标签: ssis

我有两列ActivityCountParentValue。我创建了一个表达式:

ROUND((ActivityCount / ParentValue) / 100,16) * 100 

但问题是它为某些列返回NULL,我想用NULL替换0。我似乎无法找到答案。

4 个答案:

答案 0 :(得分:8)

表达式:

ISNULL(ParentValue) || (ParentValue == 0) ? 0 : ROUND(ISNULL(ActivityCount) ? 0 : ActivityCount / ParentValue / 100,16) * 100

为了便于阅读:

ISNULL(ParentValue) || (ParentValue == 0) 
    ? 0 
    : ROUND((ISNULL(ActivityCount) 
                ? 0 
                : ActivityCount / ParentValue) / 100
             , 16) * 100

它的作用:

  • 如果 ParentValue 字段为 NULL Zero ,则执行此操作不必执行计算,因为您将遇到 Divide by Zero 错误。因此,只需退回 0

  • 即可退出表达式
  • 如果 ActivityCount 字段为 NULL ,请在执行计算前将其替换为零。

建议:

如果可能,我建议在源查询中使用 COALESCE 将NULL值替换为零和计算。

答案 1 :(得分:2)

使用ISNULL(SSIS,而不是SQL表达式)进行测试,使用conditional运算符

ISNULL(ROUND((ActivityCount / ParentValue) / 100,16) * 100) ? 0 : ROUND((ActivityCount / ParentValue) / 100,16) * 100

答案 2 :(得分:2)

尝试如下......它会帮助你......

ISNULL(ROUND((ActivityCount / ParentValue) / 100,16) * 100) || (ROUND((ActivityCount / ParentValue) / 100,16) * 100)= "" ? 0 : ROUND((ActivityCount / ParentValue) / 100,16

答案 3 :(得分:2)

我会说:

ISNULL(ActivityCount) || ISNULL(ParentValue) ? 0 : ROUND((ActivityCount/ParentValue)/100,16)*100

通过这种方式,您可以测试最简单的情况,这种情况会导致NULL结果,而不是在条件中多次计算结束情况。

(话虽如此,其中任何一项技术上都可行。)