是否存在与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
但这样做效率很低,因为它需要每个记录执行两次函数。
请注意,此查询位于表值函数中。
答案 0 :(得分:9)
也许您可以使用NULLIF功能,例如:
SELECT ISNULL(NULLIF(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), 'N/A'), RMA.IMEI) AS [IMEI to credit]
, OtherColumns
FROM dbo.TableName;
答案 1 :(得分:5)
如果您无法更改GetFirstSsnInFromSsnOut
以返回Null-Values,请尝试以下操作:
SELECT COALESCE(dbo.GetFirstSsnInFromSsnOut(NULLIF(RMA.IMEI, 'N/A')), RMA.IMEI) AS [IMEI to credit]
, OtherColumns
FROM dbo.TableName
答案 2 :(得分:5)
函数nullif如果参数相等则返回null,否则返回第一个参数。结合合并以获得乐趣和利润:
select
coalesce(
nullif(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), 'N/A'),
RMA.IMEI
) as [IMEI To Credit]
, OtherColumns
from dbo.TableName