STRING_SPLIT関数で文字列を分割する

SQL Server 2016から使えるSTRING_SPLIT関数を試してみます。

STRING_SPLIT (Transact-SQL) | Microsoft Docs

この関数は1つ目の引数の文字列を2つ目の引数の文字で分割します。戻り値はvalueカラムを1つだけ持つ表形式の結果セットです。

-- ','で分割する
select *
from string_split(N'abc,def,ghi', N',');

-- 結果
/*
value
-----------
abc
def
ghi
*/

1つ目の引数がnullの場合、戻り値は空の結果セット(レコードが0件)になります。分割できない場合は、引数の値がそのまま返ってきます。

-- 引数がnullの場合は空の結果セット
select *
from string_split(null, N',');
/*
value
-----
*/

-- 引数が分割できない場合は引数の値
select *
from string_split(N'abc', N',');
/*
value
-----
abc
*/

また2つ目の引数に文字を複数指定するとエラーになります。

-- エラーになる
select *
from string_split(N'abc_def-ghi', N'_-');

/*
プロシージャでは型 'nchar(1)/nvarchar(1)' のパラメーター 'separator' を想定しています。
*/