我不经常使用T-SQL,但我正在使用其他人的遗留代码,并且必须对为SQL Server编写的大量SQL进行更改。我遇到了这个:
ISNULL(CAST(DD.High_Margin_Pct AS varchar(10)) + '%', '') AS 'high_margin_percent',
您可能会注意到,即使值为null,也会返回'%'。当没有数字之前,有没有简洁的方法让百分号消失?或者我只需要使用CASE
语句,并认为它会是冗长的事实?
答案 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'
结果很好。即使结果为空,也不显示%。