Функция STRING_SPLIT

Функция STRING_SPLIT выполняет операцию, обратную STRING_AGG. Она принимает на входе символьную строку и разбивает её на подстроки по заданному вторым параметром разделителю. Эти подстроки формируют значения унарной таблицы. К единственному столбцу этой таблицы можно обратиться по имени value.

SELECT * FROM STRING_SPLIT('0 1 2 3 4 5 6 7 8 9',' ');
value
0
1
2
3
4
5
6
7
8
9

Фактически функция STRING_SPLIT играет роль нестандартного конструктора одностолбцовой  таблицы. Стандартная альтернатива выглядит так:

SELECT * FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) X(value);
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Больший интерес представляет случай, когда на вход функции передается значение столбца некоторой таблицы.

Пусть, например, нам требуется разбить многословные названия кораблей в таблице Ships на отдельные слова. Тогда можно выполнить следующий запрос:

SELECT name, value from Ships CROSS APPLY STRING_SPLIT(name,' ')
WHERE name LIKE '% %';
namevalue
New JerseyNew
New JerseyJersey
North CarolinaNorth
North CarolinaCarolina
Royal OakRoyal
Royal OakOak
Royal SovereignRoyal
Royal SovereignSovereign
South DakotaSouth
South DakotaDakota