ISNULL的替代品?

时间:2014-02-12 02:13:53

标签: sql-server tsql

我不经常使用T-SQL,但我正在使用其他人的遗留代码,并且必须对为SQL Server编写的大量SQL进行更改。我遇到了这个:

ISNULL(CAST(DD.High_Margin_Pct AS varchar(10)) + '%', '') AS 'high_margin_percent',

您可能会注意到,即使值为null,也会返回'%'。当没有数字之前,有没有简洁的方法让百分号消失?或者我只需要使用CASE语句,并认为它会是冗长的事实?

2 个答案:

答案 0 :(得分:2)

实际上,对于默认的SQL Server设置,应始终返回'%'。通常,尝试将值附加到null 应该会导致null,除非您使用专门用于以友好方式连接空值的函数,例如CONCAT或COALESCE。

您可以使用以下命令更改此行为:

set concat_null_yields_null on

请注意 - 这是服务器级设置,并且会超出您的交易范围。您可能应该确定是否由于某种原因以这种方式配置,或者是否有其他人在某个时刻将其设置为OFF并且从未将其设置为OFF。建议将其设置为ON。

答案 1 :(得分:1)

我用

测试
select ISNULL(CAST(null AS varchar(10)) + '%', '') AS 'high_margin_percent'

结果很好。即使结果为空,也不显示%。