Dea*_*ean 2 sql t-sql sql-server concatenation
我目前正在处理一个查询,它将多个列连接到1个字符串,并使用逗号(,)作为彼此之间的分隔符.我无法弄清楚如何处理空值.
DECLARE
@item1 nvarchar(max) = 'a',
@item2 nvarchar(max) = 'b',
@item3 nvarchar(max) = 'c'
SELECT CONCAT(
ISNULL(NULLIF(@item1, '') + ', ', ''),
ISNULL(NULLIF(@item2, '') + ', ', ''),
ISNULL(NULLIF(@item3, ''), '')
)
--@item1 = 'a', @item2 = 'b', @item3 = 'c'
--Output : a, b, c
--@item1 = 'a', @item2 = NULL, @item3 = 'c'
--Output : a, c
--@item1 = NULL, @item2 = 'b', @item3 = 'c'
--Output : b, c
Run Code Online (Sandbox Code Playgroud)
有了它上面的代码效果很好,当@item1或者@item2甚至两者都是NULL值,但如果问题@item3是NULL值,这将在年底有一个额外的逗号(,),
--@item1 = 'a', @item2 = 'b', @item3 = NULL
--Output : a, b,
--@item1 = 'a', @item2 = NULL, @item3 = NULL
--Output : a,
Run Code Online (Sandbox Code Playgroud)
我知道这是因为我很难对编码的逗号(,)NULLIF语句@item1和@item2,但我想不出有什么别的更好的办法来做到这一点.
对此问题有任何建议或更好的解决方案吗?
这个STUFF方法可能是更好的选择:
STUFF(CONCAT(',' + NULLIF(@item1, ''),',' + NULLIF(@item2, ''),',' + NULLIF(@item3, '')),1,1,'')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |