Получить значения между каждой запятой в отдельной строке на SQL сервере - PullRequest
1 голос
/ 07 января 2020

Мне нужно вставить несколько строк в таблицу базы данных из одной строки.

Вот моя строка, это будут значения, разделенные запятыми

Текущая строка:

batch 1 45665 987655,1228857 76554738,12390 8885858,301297 38998798

Я хочу, чтобы пакет 1 игнорировался или удалялся, а оставшаяся часть добавлялась в базу данных сервера SQL в виде отдельной строки после каждой запятой, подобной этой

Имя таблицы dbo.MSISDNData

Data
------------------
45665 987655
1228857 76554738
12390 8885858
301297 38998798

и когда я запрашиваю таблицу, она должна возвращать результаты, подобные этому

Запрос:

Select data 
from dbo.MSISDNData

Результаты

Data
---------------------
45665 987655
1228857 76554738
12390 8885858
301297 38998798

1 Ответ

2 голосов
/ 07 января 2020

Попробуйте это:

DECLARE @Data NVARCHAR(MAX) = N'batch 1 45665 987655,1228857 76554738,12390 8885858,301297 38998798'
DECLARE @DataXML XML;

SET @Data = '<a>' + REPLACE(REPLACE(@Data, 'batch 1 ', ''), ',', '</a><a>') + '</a>';
SET @DataXML = @Data;

SELECT LTRIM(RTRIM(T.c.value('.', 'VARCHAR(MAX)'))) AS [Data]
FROM @DataXML.nodes('./a') T(c);

Это демонстрирует, как разделить данные. Возможно, вам также понадобится санировать его - удалите batch 1, выполните обрезку и т. Д. c.

...