Оглавление:
- Уровень совместимости базы данных:
- Прежде всего установите базу данных в «single_user_access_mode», используя следующий код
- Во-вторых, измените уровень совместимости базы данных с помощью следующего кода
- Верните базу данных в режим многопользовательского доступа, используя следующий код
- Способ 2: Чтобы разделить строку, создайте определяемую пользователем функцию с табличным значением
- Способ 3: Используйте XQuery для разделения строкового значения и преобразования строки с разделителями в XML
Видео: Как разбить строку на символ с разделителями в SQL Server?
2024 Автор: Kayla Nelson | [email protected]. Последнее изменение: 2024-01-11 14:28
В этой статье мы обсудим несколько способов разделить строковое значение с разделителями. Этого можно добиться с помощью нескольких методов, в том числе.
- Использование функции STRING_SPLIT для разделения строки
- Создайте определяемую пользователем функцию с табличным значением для разделения строки,
- Используйте XQuery для разделения строкового значения и преобразования строки с разделителями в XML
Прежде всего, нам нужно создать таблицу и вставить в нее данные, которые будут использоваться во всех трех методах. Таблица должна содержать одну строку с идентификатором поля и строку с символами-разделителями в ней. Создайте таблицу с именем «студент», используя следующий код.
СОЗДАТЬ ТАБЛИЦУ ученика (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))
Вставьте имена студентов, разделенные запятыми, в одну строку, выполнив следующий код.
ВСТАВИТЬ студент (имя_студента) ЗНАЧЕНИЯ ('Монрой, Монтанез, Маролахакис, Негли, Олбрайт, Гарофоло, Перейра, Джонсон, Вагнер, Конрад')
Убедитесь, что данные были вставлены в таблицу или нет, используя следующий код.
выберите * от студента
Метод 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 »»
Таким образом, нам нужно установить уровень совместимости базы данных 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
Результат будет:
Теперь запустите этот код, чтобы получить требуемый результат.
ОБЪЯВИТЬ @string_value VARCHAR (MAX); SET @ string_value = 'Монрой, Монтанез, Маролахакис, Негли, Олбрайт, Гарофоло, Перейра, Джонсон, Вагнер, Конрад' ВЫБРАТЬ * ИЗ STRING_SPLIT (@string_value, ',')
Результатом этого запроса будет:
Способ 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)
Результат будет таким.
Способ 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
Результатом этого запроса будет:
Если вы хотите просмотреть весь XML-файл. Щелкните ссылку. После того, как вы нажмете, код ссылки будет выглядеть следующим образом.
Теперь 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 (м)
Результат будет таким:
Рекомендуемые:
Как разбить память NAND на разделы в Linux
Люди из экосистемы Microsoft или Apple, а также те, кто впервые столкнулся с мобильными устройствами Linux после работы с Google
Как разбить на разделы и настроить диски для загрузки Linux UEFI
На самом деле выполнение работы по разделению для любой реализации Linux или Windows на основе U / EFI не намного сложнее, чем создание таблиц разделов для
Как разбить USB-накопитель на разделы в Windows
USB-накопитель - это устройство хранения данных, которое содержит флэш-память со встроенным интерфейсом USB. Обычно он съемный и намного меньше по размеру
Найти и заменить строку / символ / символ новой строкой в Notepad ++
Notepad ++ - это исходный код и текстовый редактор, который в основном используется программистами для редактирования своих кодов в простой среде. Это расширенная версия
AMD Ryzen 4000 ZEN 3-го поколения нового поколения с 10 ядрами с возможностью разгона по ядрам, разделителями Infinity Fabric и многими другими функциями?
AMD может готовить более новый вариант SKU AMD Vermeer Ryzen 4000 Series, который, как сообщается, будет иметь 3 ядра ZEN. Согласно достоверным источникам