Logo ru.nowadaytechnol.com

Как разбить строку на символ с разделителями в SQL Server?

Оглавление:

Как разбить строку на символ с разделителями в SQL Server?
Как разбить строку на символ с разделителями в SQL Server?

Видео: Как разбить строку на символ с разделителями в SQL Server?

Видео: Как разбить строку на символ с разделителями в SQL Server?
Видео: Урок 15. SQL. Работа со строками. 2024, Марш
Anonim

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

  • Использование функции STRING_SPLIT для разделения строки
  • Создайте определяемую пользователем функцию с табличным значением для разделения строки,
  • Используйте XQuery для разделения строкового значения и преобразования строки с разделителями в XML

Прежде всего, нам нужно создать таблицу и вставить в нее данные, которые будут использоваться во всех трех методах. Таблица должна содержать одну строку с идентификатором поля и строку с символами-разделителями в ней. Создайте таблицу с именем «студент», используя следующий код.

СОЗДАТЬ ТАБЛИЦУ ученика (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Вставьте имена студентов, разделенные запятыми, в одну строку, выполнив следующий код.

ВСТАВИТЬ студент (имя_студента) ЗНАЧЕНИЯ ('Монрой, Монтанез, Маролахакис, Негли, Олбрайт, Гарофоло, Перейра, Джонсон, Вагнер, Конрад')

Image
Image

Убедитесь, что данные были вставлены в таблицу или нет, используя следующий код.

выберите * от студента

Image
Image

Метод 1. Используйте функцию STRING_SPLIT для разделения строки

В SQL Server 2016 «STRING_SPLIT» была введена функция, которая может использоваться с уровнем совместимости 130 и выше. Если вы используете версию SQL Server 2016 или выше, вы можете использовать эту встроенную функцию.

более того «STRING_SPLIT» input строка, которая имеет разделители подстроки и вводит один символ для использования в качестве разделителя или разделителя. Функция выводит таблицу с одним столбцом, строки которой содержат подстроки. Имя выходного столбца - « Значение". Эта функция получает два параметра. Первый параметр - это строка, а второй - символ-разделитель или разделитель, на основе которого мы должны разделить строку. Вывод содержит таблицу с одним столбцом, в которой присутствуют подстроки. Этот выходной столбец называется "Значение" как мы видим на рисунке ниже. Более того, «СТРОКА РАЗДЕЛЕНА» Функция table_valued возвращает пустую таблицу, если входная строка имеет значение NULL.

Уровень совместимости базы данных:

Каждая база данных связана с уровнем совместимости. Это обеспечивает совместимость поведения базы данных с конкретной версией SQL Server, на которой она работает.

Теперь вызовем функцию «string_split», чтобы разделить строку, разделенную запятыми. Но уровень совместимости был меньше 130, поэтому возникла следующая ошибка. «Недействительное имя объекта« SPLIT_STRING »»

Image
Image

Таким образом, нам нужно установить уровень совместимости базы данных 130 или выше. Итак, мы будем следовать этому шагу, чтобы установить уровень совместимости базы данных.

Прежде всего установите базу данных в «single_user_access_mode», используя следующий код

ALTER DATABASE SET SINGLE_USER

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

ALTER DATABASE SET COMPATIBILITY_LEVEL = 130

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

ИЗМЕНИТЬ НАБОР БАЗЫ ДАННЫХ MULTI_USER

ИСПОЛЬЗОВАТЬ [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

Результат будет:

Image
Image

Теперь запустите этот код, чтобы получить требуемый результат.

ОБЪЯВИТЬ @string_value VARCHAR (MAX); SET @ string_value = 'Монрой, Монтанез, Маролахакис, Негли, Олбрайт, Гарофоло, Перейра, Джонсон, Вагнер, Конрад' ВЫБРАТЬ * ИЗ STRING_SPLIT (@string_value, ',')

Результатом этого запроса будет:

Image
Image

Способ 2: Чтобы разделить строку, создайте определяемую пользователем функцию с табличным значением

Безусловно, этот традиционный метод поддерживается всеми версиями SQL Server. В этом методе мы создадим определяемую пользователем функцию для разделения строки по символу-разделителю, используя “ПОДСТАВКА "Функция", " CHARINDEX »И цикл while. Эту функцию можно использовать для добавления данных в выходную таблицу, поскольку ее тип возвращаемого значения - «таблица».

СОЗДАТЬ ФУНКЦИЮ [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) ВОЗВРАТ @result_set ТАБЛИЦА (splited_datNVARCHAR (MAX)) НАЧАТЬ DECLARE @start_position INT, @ 1ending_position INT end_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_position <LEN (@string_value) + 1 BEGIN IF @ending_position = 0 SET @ending_position = LEN (@string_value) + 1 INSERT INTO @result_set (@result_set (разделенные_данные) VAL string_value, @start_position, @ending_position - @start_position)) SET @start_position = @ending_position + 1 SET @ending_position = CHARINDEX (@delimiter_character, @string_value, @start_position) КОНЕЦ ВОЗВРАТ КОНЕЦ

Теперь выполните приведенный ниже скрипт, чтобы вызвать функцию разделения, чтобы разделить строку по символу-разделителю.

DECLARE @student_name VARCHAR (MAX); ОБЪЯВИТЬ @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (ВЫБРАТЬ имя_студента ОТ студента) ВЫБРАТЬ * ИЗ dbo.split_string (@student_name, @delimiter)

Результат будет таким.

Image
Image

Способ 3: Используйте XQuery для разделения строкового значения и преобразования строки с разделителями в XML

Поскольку пользовательские функции исчерпывают ресурсы, мы должны избегать этих функций. Другой вариант - встроенная функция «string_split», но эту функцию можно использовать для базы данных, для которой уровень совместимости составляет 130 или выше. Итак, вот еще одно решение этой сложной задачи. строка может быть разделена с помощью следующих XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Заменить (@string_value, @delimiter_value, '') + '') AS XML) ВЫБЕРИТЕ @xml_value

Результатом этого запроса будет:

Image
Image

Если вы хотите просмотреть весь XML-файл. Щелкните ссылку. После того, как вы нажмете, код ссылки будет выглядеть следующим образом.

Image
Image

Теперь XML-строку нужно обработать дальше. Наконец, мы будем использовать «x-Query» для запроса из XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Заменить (@string_value, @delimiter_value, '') + '') AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') AS x (м)

Результат будет таким:

Рекомендуемые:

Тенденции

Исправлено: Err_connection_refused в Google Chrome

Обновление "Космические инженеры" меняет многопользовательский режим

Предшественник MacOS Proton RAT, Calisto, обнаружен на VirusTotal

Исправление: обратитесь к администратору для получения разрешения

Intel готовится к выпуску низковольтных чипов с TDP 14 нм + серии Amber Lake-Y 5 Вт с повышенными тактовыми частотами

Microsoft PowerShell Core теперь доступен в виде Snap-пакета в дистрибутивах Linux

Корпорация PUBG приносит свои извинения за использование скандального флага восходящего солнца в мобильной версии PUBG

Межсайтовый скриптинг X-XSS-Protection отключен из-за ошибки в Microsoft Edge

В патче Escape From Tarkov 0.9 добавлен первый босс - The Dealbreaker

Уязвимость при записи в Adobe Acrobat и Reader's может допустить выполнение кода

Разблокировки загрузчика Huawei больше не доступны с 23 июня г

Обновление Microsoft ToDo V1.35 представляет функции Star и совместной работы для IOS и Android

Переключатель QL служебной программы DNSLint от Microsoft может разрешить загрузку удаленных файлов

SUSE Linux Enterprise 15 устраняет барьеры между OpenSUSE и SLE

Epic отвечает на обвинения в мошенничестве в Fortnite Summer Skirmish