SQL Server String_split()函数

在本教程中,将学习如何使用SQL Server STRING_SPLIT()函数将字符串拆分为基于指定分隔符的子字符串行。

SQL Server STRING_SPLIT()函数简介

STRING_SPLIT()函数是一个表值函数,它将字符串拆分为一个表,该表由基于指定分隔符的子字符串行组成。

以下是STRING_SPLIT()函数的语法:

STRING_SPLIT ( input_string , separator )

在这个语法中:

  • input_string - 是一个基于字符的表达式,其值为NVARCHARVARCHARNCHARCHAR字符串。
  • separator - 是一个单个字符,用作拆分的分隔符。

STRING_SPLIT()函数返回单列表,其列名为value。 此结果表包含作为子字符串的行。

请注意,值列中的值可以按任何排序顺序排列。 要获得预期的顺序,需要将ORDER BY子句添加到SELECT语句中:

ORDER BY value [ASC|DESC]

SQL Server STRING_SPLIT()函数示例

下面来看一些使用STRING_SPLIT()函数的例子。

1. 使用STRING_SPLIT()函数拆分逗号分隔值字符串

此示例使用STRING_SPLIT()函数来解析以逗号分隔的值列表:

SELECT 
    value  
FROM 
    STRING_SPLIT('red,green,,blue', ',');

执行上面查询语句,得到以下结果:

value
---------------
red
green

blue

(4 rows affected)

第三行为空,因为输入字符串包含两个连续的逗号(,,)。 要获取非空子字符串,请在SELECT语句中添加WHERE子句,如以下查询所示:

SELECT 
    value  
FROM 
    STRING_SPLIT('red,green,,blue', ',')
WHERE
    TRIM(value) <> '';

执行上面查询语句,得到以下结果:

value
---------------
red
green
blue

(3 rows affected)

2. 使用STRING_SPLIT()函数在列中拆分逗号分隔的字符串

有时,数据库表未规范化。一个典型的例子是列可以存储由逗号(,)分隔的多个值。

STRING_SPLIT()可以通过拆分这些多值列来帮助规范化数据。

为了方便演示,下面创建一个示例表。

首先,创建一个名为sales.contacts的新表,用于存储联系信息:

CREATE TABLE sales.contacts (
    id INT PRIMARY KEY IDENTITY,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    phones VARCHAR(500)
);

其次,在sales.contacts表中插入一些联系人信息:

INSERT INTO 
    sales.contacts(first_name, last_name, phones)
VALUES
    ('John','Doe','(408)-123-3456,(408)-123-3457'),
    ('Jane','Doe','(408)-987-4321,(408)-987-4322,(408)-987-4323');

第三,使用STRING_SPLIT()函数拆分电话号码和CROSS APPLY以连接sales.contacts表:

SELECT 
    first_name, 
    last_name,
    value phone
FROM 
    sales.contacts
    CROSS APPLY STRING_SPLIT(phones, ',');

执行上面查询语句,得到以下结果:

查询结果

3. STRING_SPLIT()函数使用带有聚合函数

以下示例返回每个联系人的联系人和电话号码:

SELECT 
    CONCAT_WS(' ',first_name,last_name) full_name,
    COUNT(value) number_of_phones
FROM 
    sales.contacts
    CROSS APPLY STRING_SPLIT(phones, ',')
GROUP BY 
    CONCAT_WS(' ',first_name,last_name);

执行上面查询语句,得到以下结果:

在本教程中,学习了如何使用STRING_SPLIT()函数将字符串拆分为指定分隔符的子字符串表。


上一篇: SQL Server字符串函数 下一篇: SQL Server Window函数