我有一個表有多個可爲空的字符串字段。如何使用空格分隔符連接字符串,其中每個字符串都可以爲空?
對於報告,我想將它們組合成一個單獨的字符串,並用每個字段的空格分隔。右側必須修剪。
測試數據:
DECLARE
@test
TABLE
(
f1 NVARCHAR(100)
, f2 NVARCHAR(100)
, f3 NVARCHAR(100)
)
INSERT INTO @test
-- NULL values must be skipped
SELECT NULL , NULL , NULL
UNION SELECT NULL , NULL , 'foo'
UNION SELECT NULL , 'foo', NULL
UNION SELECT 'foo' , NULL , NULL
UNION SELECT NULL , 'foo', 'bar'
UNION SELECT 'foo' , 'bar', NULL
UNION SELECT 'foo' , NULL , 'bar'
UNION SELECT 'foo' , 'bar', 'baz'
-- Empty string values must be skipped
UNION SELECT 'foo' , '' , 'bar'
UNION SELECT '' , '' , 'baz'
-- Spaces in values must be kept
UNION SELECT 'foo bar', '' , 'baz'
-- The table should not contain values with surrounding space
-- So this case is not important
UNION SELECT ' foo ' , ' ' , 'baz '
預期的結果:
''
'foo'
'foo'
'foo'
'foo bar'
'foo bar'
'foo bar'
'foo bar baz'
'foo bar'
'baz'
'foo bar baz'
'foo baz'
' foo baz' -- This is optional
我當前的代碼:
SELECT
RTRIM(
CASE WHEN ISNULL(f1, '') = '' THEN '' ELSE f1 + ' ' END
+ CASE WHEN ISNULL(f2, '') = '' THEN '' ELSE f2 + ' ' END
+ CASE WHEN ISNULL(f3, '') = '' THEN '' ELSE f3 + ' ' END
)
FROM
@test
這工作,但我想知道如果有一個更簡潔的方式爲了達成這個?
在你的答案中,優先於使用'+而不是'CONCAT()'的優勢? –
'CONCAT()'根據文檔自動執行'ISNULL':http://msdn.microsoft.com/de-de/library/hh231515.aspx –
我修復了你的答案,這確實比@ podiluska –