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

但这将是低效的,因为它需要每条记录执行两次该函数。

请注意,此查询位于表值函数中。

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

如果您无法更改GetFirstSsnInFromSsnOut为返回 Null-Values,请尝试以下操作:

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 回答