在本教程中,将学习如何使用SQL Server STRING_SPLIT()
函数将字符串拆分为基于指定分隔符的子字符串行。
SQL Server STRING_SPLIT()函数简介
STRING_SPLIT()
函数是一个表值函数,它将字符串拆分为一个表,该表由基于指定分隔符的子字符串行组成。
以下是STRING_SPLIT()
函数的语法:
STRING_SPLIT ( input_string , 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()
函数将字符串拆分为指定分隔符的子字符串表。