3

ビット値を比較し、その値が 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 ステートメントが必要なため、非常に面倒です。

これを行うためのクリーンできちんとした方法を探していますが、アイデアが不足しています-これを達成するためのより良い方法はありますか? ありがとう。

4

4 に答える 4

4

CASE ステートメントをインラインで追加するだけです。mybit=1 の場合は空の文字列を返すことを忘れないでください。そうしないと、全体が NULL を返します。

Select 
-- do other comparisons etc to build up the return string.
 + Case When @mybit=0 Then mystring else '' End
于 2013-02-08T17:32:37.527 に答える
3

SQL Server 2012を使用している場合IIFと同様に、を使用することもできます。CONCAT

SELECT CONCAT('Start',
              IIF(@mybit=0,'myString',''),
              'End')

IIFよりも少し簡潔ですCASECONCAT非文字列型を文字列に自動的にキャストし、NULL連結は空の文字列を連結するのと同じように扱われるという点で有益な場合があります。

于 2013-02-08T17:43:03.637 に答える
3

また、ここでは単純な ものを次のように使用できます。case

Select 'Your other string ' +  
       Case mybit When 0 then 'mystring' else '' End As Results

--Results will be like
mybit    Results
0        'Your other string mystring'
1        'Your other string '

OR何も (null) を返さないmybit <> 0場合

Select 'Your other string ' +  Case mybit When 0 then 'mystring' End As Results

--Results will be like
mybit    Results
0        'Your other string mystring'
1        null

どちらの場合もSQL-SERVER-DEMO

于 2013-02-08T17:36:06.323 に答える
0

共通コードをサブクエリに入れることはできますか? これは次のようになります。

select case when myBit = 0 then value else value + 'what you append' end returnvalue
from
(subquery with common code) abc

または多分関数

select case when myBit = 0 then yourfunction() 
else yourfunction + 'what you append' end returnvalue
于 2013-02-08T17:33:13.960 に答える