Эта статья появилась на свет в тот момент, когда я работал над другим материалом, посвященным строковым функциям. До той поры мне не доводилось сталкиваться с новой функцией STRING_SPLIT (), реализованной в версии SQL Server 2016; я познакомился с ней, когда работал над темой, которую в будущем надеюсь разобрать в нескольких статьях. Этой функцией можно воспользоваться в случае, когда целевая база данных находится в режиме COMPATIBILITY_MODE = 130.

Поясню: STRING_SPLIT () — это функция, возвращающая табличное значение. Она предоставляет нам возможность анализировать строку с разделителями, передаваемую в качестве параметра (наряду с символом-разделителем, выступающим в роли второго параметра). Функция возвращает выходной столбец, то есть результирующий набор значений таблицы, предоставляющий строку для каждого отдельного значения, помещенного между символами-разделителями.

Синтаксис функции STRING_SPLIT

С точки зрения синтаксиса конструкция, обеспечивающая возвращение результатов выполнения функции STRING_SPLIT, напоминает произвольный вызов функции, возвращающей табличное значение (листинг 1).

В качестве входного строкового параметра может выступать любое из следующих значений:

  • строковое значение с разделителями;
  • присваивание переменной типа varchar ();
  • табличный столбец при использовании оператора CROSS APPLY.

Примеры возвращаемых результатов выполнения функции STRING_SPLIT ()

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

Первый пример — это передача строкового значения. Вне всякого сомнения, это самый простой метод решения задачи. Пользователь должен представить только входную строку и символ разделителя. Следующий пример позволит вам более ясно представить картину. Посмотрим, что произойдет, когда мы в демонстрационных целях введем в функцию список аэропортов, посещенных мною на протяжении прошлого года (листинг 2). Результаты показаны на рисунке 1.

 

Результаты выполнения листинга 2
Рисунок 1. Результаты выполнения листинга 2

Разумеется, эти результаты можно пропустить через фильтр с предикатами в предложении WHERE, чтобы отсортировать их с помощью предложения ORDER BY (листинг 3). Результаты приведены на рисунке 2.

 

Результаты выполнения листинга 3
Рисунок 2. Результаты выполнения листинга 3

Второй пример — нормализация данных с помощью переменной для строки с разделителями и курсора. Ведь, кроме всего прочего, мы можем объявить переменную типа varchar (n) или varchar (max) и передать ее в качестве первого параметра; результаты будут аналогичными. В этом примере мы имеем дело с очисткой денормализованных данных из одной таблицы посредством парсинга и вставкой их в нормализованную таблицу. Я воспользуюсь тремя таблицами (листинг 4):

  • [events] — таблица, где хранятся связанные с конференциями SQL Cruise данные, характеризующие предстоящие события до конца 2018 года;
  • [event_ports_denormalized] — таб­ли­ца, где хранится столбец с...
Это не вся статья. Полная версия доступна только подписчикам журнала. Пожалуйста, авторизуйтесь либо оформите подписку.
Купить номер с этой статьей в PDF