代码之家  ›  专栏  ›  技术社区  ›  Ryan Gadsdon

对case表达式结果使用ISNULL()

  •  0
  • Ryan Gadsdon  · 技术社区  · 6 年前

    我有一个大的case表达式

    例如

    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END as [Test]
    

    用一个非常大的case语句来完成这个任务的最干净的方法是什么?

    4 回复  |  直到 6 年前
        1
  •  3
  •   AakashM    6 年前

    我可能没说到点子上,但你有什么不喜欢的

    ISNULL(
        CASE WHEN ... THEN ... ELSE
        CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
        CASE WHEN ... THEN ... ELSE
        CASE WHEN ... THEN ... ELSE '' END ELSE '' END 
        , '')
    AS [Test]
    

    ?

        2
  •  1
  •   Thom A    6 年前

    用一个 ISNULL :

    ISNULL(
    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END,'') as [Test]
    

    或者,你可以使用 CONCAT NULL 而另一个,你会得到一个价值。 NULL + {Non NULL Expression} = 然而, CONCAT(NULL,{Non NULL Expression}) {Non NULL Expression} .:

    CONCAT(
    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END,
    CASE WHEN ... THEN ... ELSE
    CASE WHEN ... THEN ... ELSE '' END ELSE '' END) as [Test]
    

    永远不会回来 无效的 无效的 ,空字符串( (n)varchar

        3
  •  1
  •   Yogesh Sharma    6 年前

    我会做:

    SELECT ISNULL([Test], '')
    FROM table t CROSS APPLY
         ( VALUES (CASE WHEN ... THEN ... ELSE
                   CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
                   CASE WHEN ... THEN ... ELSE
                   CASE WHEN ... THEN ... ELSE '' END ELSE '' END)
         ) tt ([Test]);
    

    不过,你也可以申请 ISNULL() 对于整个大大小写表达式:

    SELECT ISNULL((CASE WHEN ... THEN ... ELSE
                   CASE WHEN ... THEN ... ELSE '' END ELSE '' END +
                   CASE WHEN ... THEN ... ELSE
                   CASE WHEN ... THEN ... ELSE '' END ELSE '' END), ''
                  )
    . . . 
    

    APPLY 你可以用 [Test] 列任何位置或多次。

        4
  •  0
  •   Alays    6 年前

    推荐文章