当前位置:数据库 > SQLServer >>

msSQL Server STRING_SPLIT()函数使用方法

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

input_string - 是一个基于字符的表达式,其值为NVARCHAR,VARCHAR,NCHAR或CHAR字符串。separator - 是一个单个字符,用作拆分的分隔符。
STRING_SPLIT()函数返回单列表,其列名为value。 此结果表包含作为子字符串的行。
请注意,值列中的值可以按任何排序顺序排列。 要获得预期的顺序,需要将ORDER BY子句添加到SELECT语句中:
ORDER BY value [ASC|DESC]
SQL
SQL Server STRING_SPLIT()函数示例下面来看一些使用STRING_SPLIT()函数的例子。


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

此示例使用STRING_SPLIT()函数来解析以逗号分隔的值列表:
SELECT 
    value  
FROM 
    STRING_SPLIT('red,green,,blue', ',');
SQL
执行上面查询语句,得到以下结果:
value
---------------
red
green

blue

(4 rows affected)
Shell
第三行为空,因为输入字符串包含两个连续的逗号(,,)。 要获取非空子字符串,请在SELECT语句中添加WHERE子句,如以下查询所示:
SELECT 
    value  
FROM 
    STRING_SPLIT('red,green,,blue', ',')
WHERE
    TRIM(value) <> '';
SQL
执行上面查询语句,得到以下结果:
value
---------------
red
green
blue

(3 rows affected)
Shell
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)
);
SQL
其次,在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');
SQL
第三,使用STRING_SPLIT()函数拆分电话号码和CROSS APPLY以连接zzzyk_com表:
SELECT     first_name,     last_name,   phone FROM    zzzyk_com     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);
SQL
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,