我有一个在 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,则什么都没有。
所以我将它重构为只有一次公共(public)代码,然后像这样在末尾附加到字符串:
-- 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 语句。当mybit=1时别忘了返回一个空字符串,否则整个返回NULL。
Select
-- do other comparisons etc to build up the return string.
+ Case When @mybit=0 Then mystring else '' End
关于sql - 寻找凌乱的 SQL ISNULL/NULLIF 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778036/