3

に似てCOALESCEいるが、そうでない値の関数はありNULLますか?

文字列リテラルを返す場合、スカラー値関数の戻り値を別の値に置き換える必要がありますN/A。それが返される場合、NULL私は使用できます:

SELECT COALESCE(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), RMA.IMEI) AS [IMEI to credit]
     , OtherColumns
FROM dbo.TableName

しかし、それが返されるので、N/Aこれは機能しません。私も使用できます:

SELECT CASE WHEN dbo.GetFirstSsnInFromSsnOut(RMA.IMEI)='N/A' 
         THEN RMA.IMEI 
         ELSE dbo.GetFirstSsnInFromSsnOut(RMA.IMEI)
       END AS [IMEI To Credit]         
    , OtherColumns
FROM dbo.TableName

ただし、レコードごとに関数を 2 回実行する必要があるため、非効率的です。

このクエリはテーブル値関数内にあることに注意してください。

4

3 に答える 3

10

おそらく、そこでNULLIF関数を使用できます。たとえば、次のようになります。

SELECT ISNULL(NULLIF(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), 'N/A'), RMA.IMEI) AS [IMEI to credit]
     , OtherColumns
FROM dbo.TableName;
于 2013-11-15T10:34:13.507 に答える
5

GetFirstSsnInFromSsnOutNull 値を返すように変更できない場合は、次を試してください。

SELECT COALESCE(dbo.GetFirstSsnInFromSsnOut(NULLIF(RMA.IMEI, 'N/A')), RMA.IMEI) AS [IMEI to credit] , OtherColumns FROM dbo.TableName

于 2013-11-15T10:34:06.303 に答える
5

関数 nullif は、引数が等しい場合は null を返し、そうでない場合は最初の引数を返します。合体と組み合わせて楽しみと利益を得る:

select
    coalesce(
        nullif(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), 'N/A'),
        RMA.IMEI
    ) as [IMEI To Credit]
    , OtherColumns
from dbo.TableName
于 2013-11-15T10:34:55.847 に答える