如何在 SQL Server 中向串联字符串添加分隔符 – CONCAT_WS()

发布于

在SQL Server和Azure中,如果需要连接两个或多个字符串,可以使用T-SQL CONCAT()函数。与任何基本串联操作一样,此函数将字符串端到端地连接在一起。

但是,如果您需要在每个字符串之间添加分隔符怎么办?

例如,您可能希望创建一个以逗号分隔的字符串列表。在这种情况下,您需要在每个字符串之间插入一个逗号。示例如下:

Paris, France

取而代之的是:

ParisFrance

幸运的是,T-SQL 提供了帮助你做到这一点的函数。该函数的工作方式与函数类似,只是它需要一个额外的参数 - 您要使用的分隔符。CONCAT_WS()``CONCAT_WS()``CONCAT()

下面是一个示例:

SELECT CONCAT_WS(’,’,‘Paris’, ‘France’) AS Location;

输出:

Location    
------------
Paris,France

如果需要,您可以在其中添加一个空格:

SELECT CONCAT_WS(’, ‘,‘Paris’, ‘France’) AS Location;

输出:

Location     
-------------
Paris, France

分离器

没有什么可说的,分隔符必须是逗号。分隔符可以是任何字符类型 (、、 或 ) 的表达式。char``nchar``nvarchar``varchar

下面是与上一个示例相同的示例,只是此示例使用不同的分隔符。

SELECT CONCAT_WS(’ - ‘,‘Paris’, ‘France’) AS Location;

输出:

Location      
--------------
Paris - France

数据库示例

下面是从数据库中检索数据并将两列合并为一列(用逗号分隔)的示例:

SELECT CONCAT_WS(’, ‘, city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = ‘THA’;

输出:

Location                   
---------------------------
Bangkok, Thailand          
Nonthaburi, Thailand       
Nakhon Ratchasima, Thailand
Chiang Mai, Thailand       
Udon Thani, Thailand       
Hat Yai, Thailand          
Khon Kaen, Thailand        
Pak Kret, Thailand         
Nakhon Sawan, Thailand     
Ubon Ratchathani, Thailand 
Songkhla, Thailand         
Nakhon Pathom, Thailand

空值

如果任何参数是值,SQL Server 将跳过该值及其分隔符,但仍会处理其他参数。NULL

例:

SELECT CONCAT_WS(’, ‘,‘Paris’, NULL, ‘France’) AS Location;

输出:

Location     
-------------
Paris, France

空值分隔符

如果分隔符本身是一个值,则仍将执行串联操作,但没有分隔符。NULL

例:

SELECT CONCAT_WS(NULL,‘Paris’, NULL, ‘France’) AS Location;

输出:

Location   
-----------
ParisFrance

这是T-SQL和MySQL之间的区别之一(MySQL也有一个CONCAT_WS()函数)。在MySQL中,如果分隔符是一个值,则串联会产生一个值。NULL``NULL