ビット値を比較し、その値が 1 の場合は文字列を返し、値が 0 の場合は空の文字列を返す必要がある SQL Server 2012 で SQL クエリを実行しています。
もともと私は次のような 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
問題は、'do other' セクションのすべてのコードが同じであることです。私がやりたいことは、ビットがゼロの場合は戻り値に文字列を追加し、ビットが 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 ステートメントが必要なため、非常に面倒です。
これを行うためのクリーンできちんとした方法を探していますが、アイデアが不足しています-これを達成するためのより良い方法はありますか? ありがとう。