Функция STRING_SPLIT
Функция STRING_SPLIT выполняет операцию, обратную STRING_AGG. Она принимает на входе символьную строку и разбивает её на подстроки по заданному вторым параметром разделителю. Эти подстроки формируют значения унарной таблицы. К единственному столбцу этой таблицы можно обратиться по имени value.
SELECT * FROM STRING_SPLIT('0 1 2 3 4 5 6 7 8 9',' ');🚫
[[ error ]]
| [[ column ]] |
|---|
| NULL [[ value ]] |
| 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);🚫
[[ error ]]
| [[ column ]] |
|---|
| NULL [[ value ]] |
Больший интерес представляет случай, когда на вход функции передается значение столбца некоторой таблицы.
Пусть, например, нам требуется разбить многословные названия кораблей в таблице Ships на отдельные слова. Тогда можно выполнить следующий запрос:
SELECT name, value
from Ships
CROSS APPLY STRING_SPLIT(name,' ')
WHERE name LIKE '% %';🚫
[[ error ]]
| [[ column ]] |
|---|
| NULL [[ value ]] |
| 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 |