我有一个存储过程,它从我的employee表中获取信息并返回数据。
使用了3列:
B.[SiloDesc] + ' (' + B.[TitleDesc] + ') ' + B.[SkillSetDesc] as SkillSetDesc,
我的问题是,如果其中一个恰好是null,它就不会显示任何数据。无论其中一个字段是否为空,包含数据的最佳方法是什么。
答案 0 :(得分:2)
isnull(B.[SiloDesc], '')
+ ' (' + isnull(B.[TitleDesc], '') + ') '
+ isnull(B.[SkillSetDesc], '') as SkillSetDesc,
答案 1 :(得分:2)
您可以为每个列使用coalesce()
或isnull()
...或者您可以简单地使用...
CONCAT ( string_value1, string_value2 [, string_valueN ] )
采用可变数量的字符串参数并将它们连接成一个字符串。它至少需要两个输入值;否则,会引发错误。所有参数都隐式转换为字符串类型,然后连接。 空值隐式转换为空字符串。
A。: TitleDesc
为null
时删除括号:
select concat(B.[SiloDesc], ' (' + B.[TitleDesc] + ')', ' ' + B.[SkillSetDesc])
由于在sql中处理null
的方式,表达式' (' + null + ')'
会导致null
concat()
将其视为空字符串...有点好,因为如果值为null
,它会有效地删除括号。
B。:保留括号,无论如何:
select concat(B.[SiloDesc], ' (', B.[TitleDesc], ') ', B.[SkillSetDesc])
样品:
select concat('john', ' (' + null + ')', ' adams') -- john adams
select concat('john', ' (test)', ' ' + null) -- john (test)
select concat('john', ' (the man)', ' adams') -- john (the man) adams