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

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

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

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

 СОЗДАТЬ ТАБЛИЦУ student (ID INT IDENTITY (1, 1  ), Student_name VARCHAR (MAX)) 

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

 INSERT INTO student (student_name) VALUES (  'Монрой, Монтанез, Маролахакис, Негли, Олбрайт, Гарофоло, Перейра, Джонсон, Вагнер, Конрад') 

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

 select * from student 

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

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

Кроме того, «STRING_SPLIT» вводит строку с разделенными подстроками. и вводит один символ для использования в качестве разделителя или разделителя. Функция выводит таблицу с одним столбцом, строки которой содержат подстроки. Имя выходного столбца – « Значение» . Эта функция получает два параметра. Первый параметр – это строка, а второй – символ-разделитель или разделитель, на основе которого мы должны разделить строку. Выходные данные содержат таблицу с одним столбцом, в которой присутствуют подстроки. Этот выходной столбец называется «Значение» , как видно на рисунке ниже. Более того, функция «STRING SPLIT» table_valued возвращает пустую таблицу, если входная строка имеет значение NULL.

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

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

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

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

  • Прежде всего установите базу данных в «single_user_access_mode», используя следующий код.
 ALTER DATABASE  SET  SINGLE_USER 
  • Во-вторых, измените уровень совместимости базы данных с помощью следующего кода.
 ALTER DATABASE   SET COMPATIBILITY_LEVEL = 130 
  • Верните базу данных в режим многопользовательского доступа, используя следующий код.
 ALTER DATABASE  SET MULTI_USER 
 USE [master] GOALTER DATABASE [bridge_centrality] SET SINGLE_USERALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130ALTER DATABASE [bridge_centrality] SET MULTI_USERGO 

вывод будет следующим:

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

 DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Монрой, Монтанез, Маролахакис, Негли  , Олбрайт, Гарофоло, Перейра, Джонсо  n, Вагнер, Конрад'SELECT * FROM STRING_SPLIT (@string_value, ',') 

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

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

Конечно , этот традиционный метод поддерживается всеми версиями SQL Server. В этом методе мы создадим определяемую пользователем функцию для разделения строки по символу-разделителю, используя функцию « SUBSTRING », « CHARINDEX » и цикл while. Эту функцию можно использовать для добавления данных в выходную таблицу, поскольку ее тип возвращаемого значения – «таблица».

 CREATE FUNCTION [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR  (1)) ВОЗВРАТ @result_set ТАБЛИЦА (разделенные_данные NVARCHAR (МАКС)) НАЧАТЬ ОБЪЯВЛЕНИЕ @start_position INT, @ending_position INT SELECT @start_position = 1, @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE  

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

 DECLARE @student_name VARCHAR (MAX); DECLARE @delimiter CHAR (1); SET @delimiter = ',' SET @student_name = (SELECT student_name FROM student) SELECT * FROM dbo.split_string (@student_name, @delimiter) 

Набор результатов будет таким.

Метод 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 = (  ВЫБРАТЬ имя студента ОТ студента) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Replace (@string_value, @delimiter_value, ' ') + ''  ) AS XML) SELECT @xml_value 

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

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

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

 DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value =  (ВЫБЕРИТЕ имя студента ОТ студента) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Replace (@string_value, @delimiter_value, ' ') + '  ') AS XML) SELECT xmquery ('. '). Value ('. ',' VARCHAR (15) ') AS VALUEFROM @ xml_value.nodes ('/studentname ') AS x (m) 

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

Оцените статью
techscreen.ru
Добавить комментарий