我在 SQL Server 2012 上运行了一个 SQL 查询,它需要比较一个位值,如果该值为 1,则返回一个字符串,如果该值为 0,则返回一个空字符串。
最初我将它作为这样的 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 语句。
我正在寻找一种干净整洁的方法来做到这一点,但已经没有想法了——有人有更好的方法来实现这一点吗?谢谢。