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