簡體   English   中英

串聯列后跳過NULL值,將換行符插入SQL查詢返回

[英]Insert line break into SQL query return after concatenating columns whilst skipping NULL values

我想將幾列連接在一起,並在考慮到NULL值的情況下以換行符分隔每列返回。

例如,我有以下數據表( [dbo].[Address] ):

Name         Address_line1    Address_line2   Address_line 3   Postcode
Mr Smith     1 Smith Street   NULL            Ireland          AB1 1CD
Mr Jones     1 Jones Road     Wales           NULL             EF2 3GH
Mrs White    1 White Way      England         UK               NULL

我想返回以下內容:

Name         Address
Mr Smith     1 Smith Street,
             Ireland,
             AB1 1CD
Mr Jones     1 Jones Road,
             Wales,
             EF2 3GH
Mrs White    1 White Way,
             England,
             UK

我該怎么做呢?

您可以結合使用+運算符和COALESCE()

WITH T AS (SELECT 'Mr Smith' AS NAME, '1 Smith Street' AS Address_Line1, NULL AS Address_line2, 'Ireland' AS Address_Line3, 'AB1 1CD' AS PostCode
UNION SELECT 'Mr Jones' AS NAME, '1 Jones Road' AS Address_Line1, 'Wales' AS Address_line2, NULL AS Address_Line3, 'EF2 3GH' AS PostCode
UNION SELECT 'Mrs White' AS NAME, '1 White Way' AS Address_Line1, 'England' AS Address_line2, 'UK' AS Address_Line3, NULL AS PostCode
)
  SELECT NAME, ADDRESS_LINE1  
+ COALESCE(','+ CHAR(13)+CHAR(10)  + Address_line2 , '') 
+ COALESCE ',' + (CHAR(13)+CHAR(10)  +Address_line3 ,'')
+ COALESCE(',' + CHAR(13)+CHAR(10) +POSTCODE,'') AS ADDRESS
FROM T

輸出:

NAME      
--------- --------------------------------------------
Mr Jones  1 Jones Road,
   Wales,
   EF2 3GH
Mr Smith  1 Smith Street,
   Ireland,
   AB1 1CD
Mrs White 1 White Way,
   England,
   UK

你有嘗試過嗎?

select name,
       replace(stuff( coalesce('[sep]' + address_line1, '') +
                      coalesce('[sep]' + address_line2, '') +
                      coalesce('[sep]' + address_line3, ''),
                      1, 5, ''
                    ), '[sep]', '
'
               )
. . .

您可以像這樣使用CHAR(13)

select Name, 
Address_line1 + ',' +char(13) + Address_line2 + ',' + char(13) + Address_line 3 as address 
from [dbo].[Address]
SELECT 
name, 
CONCAT(
COALESCE(Address_line1,''), ', ', 
COALESCE(Address_line2,''), ', ', 
COALESCE(Address_line3,''), ', ', 
COALESCE(Postcode,'')
) AS address 
FROM table_name;

我更喜歡將ISNULL()與Char(13)+ CHAR(10)結合使用:

SELECT 
Name 
, ISNULL(Address_line1 + ',' + CHAR(13)) + CHAR(10), '') + ISNULL(Address_line2 + ',' + CHAR(13)) + CHAR(10), '') + ISNULL(Address_line 3, '') as address 
from [dbo].[Address]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM