Функция 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 '% %';
name | value |
---|---|
New Jersey | New |
New Jersey | Jersey |
North Carolina | North |
North Carolina | Carolina |
Royal Oak | Royal |
Royal Oak | Oak |
Royal Sovereign | Royal |
Royal Sovereign | Sovereign |
South Dakota | South |
South Dakota | Dakota |