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函數