CONCAT_WS (Transact-SQL)
適用於: sql Server 2017 (14.x) 和更新版本的 Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric 倉儲中的 Azure Synapse Analytics SQL 分析端點
此函式會傳回透過以端對端方式串連 (或聯結) 兩個以上字串值所產生的字串。 它使用第一個函數引數中指定的分隔符號來分隔這些串連的字串值。 (CONCAT_WS
指出 與分隔符號的串連。)
語法
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
引數
separator
任何字元類型的表達式(char、 nchar、 nvarchar 或 varchar)。
argument1, argument2 [ , argumentN ]
任何字串值的表達式。 CONCAT_WS
函式需要至少兩個引數,而且不能超過 254 個引數。
傳回類型
長度和類型取決於輸入的字串值。
備註
CONCAT_WS
會採用可變數量的字串引數,並將其串連 (聯結) 成單一字串。 它使用第一個函數引數中指定的分隔符號來分隔這些串連的字串值。 CONCAT_WS
需要分隔符自變數和至少兩個其他字串值自變數;否則, CONCAT_WS
會引發錯誤。 CONCAT_WS
會在串連之前將所有引數隱含地轉換成字串類型。
隱含轉換成字串會遵循現有的資料類型轉換規則。 如需行為和資料類型轉換的詳細資訊,請參閱 CONCAT (Transact-SQL) 。
NULL 值的處理方式
CONCAT_WS
會忽略 SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
字串。
如果CONCAT_WS
收到具有所有NULL
值的自變數,則會傳回 varchar(1) 類型的空字串。
CONCAT_WS
在串連期間忽略 Null 值,而且不會在 Null 值之間新增分隔符。 因此,CONCAT_WS
可以乾淨地處理可能有「空白」值 - 例如,第二個地址欄位的字串串連。 如需詳細資訊,請參閱 範例 B。
如果案例牽涉到以分隔符分隔的 Null 值,請考慮 ISNULL 函式。 如需詳細資訊,請參閱 C 範例。
範例
A. 使用分隔符串連值
此範例會串連數據表中的sys.databases
三個數據行,並以空格括住的連字元分隔值。-
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
結果集如下所示。
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. 略過 NULL 值
這個範例會 NULL
忽略自變數清單中的值,並使用逗號分隔符值 (,
)。
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
結果集如下所示。
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. 從數據表產生 CSV 格式的數據
這個範例會使用逗號分隔符值 (,
),並在結果集的數據行分隔值格式中加入歸位字元 CHAR(13)
。
SELECT STRING_AGG(CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)) AS DatabaseInfo
FROM sys.databases;
結果集如下所示。
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS
會忽略數據 NULL
行中的值。 使用 ISNULL
函數來包裝可為 Null 的資料行,並提供預設值。 例如:
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
ISNULL(containment_desc, 'N/A')
), CHAR(13)) AS DatabaseInfo
FROM sys.databases;