我有一个SQL查询在SQL Server 2012上运行,需要比较一个比特值,如果该值为1则返回一个字符串,如果为零则返回一个空字符串。寻找替代凌乱的SQL ISNULL/NULLIF
我本来它作为像这样的CASE语句:
CASE WHEN myBit = 0 THEN
-- do other comparisons etc to build up the return string.
+'myString'
ELSE
-- do other comparisons etc to build up the return string.
'' END
的问题是,所有的代码中“做其他”部分是相同的。我想要做的是追加一个字符串的返回值,如果该位是零,如果它是1没有。
所以我重构它只有一次共同的代码,然后追加到字符串的末尾这个:
-- do other comparisons etc to build up the return string. +
ISNULL(NULLIF(Cast(ISNULL(CAST(NULLIF(myBit, 0) AS NVARCHAR), 'myString') AS varchar),'0'),'')
但是,上面看起来很混乱,至少因为CAST声明是必需的。
我正在寻找干净整洁的做法,但已经用完了想法 - 任何人都有更好的方法来实现这个目标?谢谢。
请记住,CASE是一个函数/表达式,* not * a子句,因此您可以在使用ISNULL,NULLIF或任何其他函数的相同位置使用它。 – RBarryYoung 2013-02-08 17:43:10