Как извлечь данные через точку с запятой - PullRequest
0 голосов
/ 11 июля 2019

Допустим, у меня есть таблица в SQLServer с именем Tasks.Он содержит некоторые задачи с людьми, назначенными на задачи.Рабочие находятся в одном столбце.Они разделяются точкой с запятой.

ID  Workers
1   John Newman; Troy Batchelor; Mike Smith
2   Chris Portman
3   Sara Oldman; Greg House

Мне нужно отделить работников от столбца, как показано ниже

Результат:

ID  Worker
1   John Newman
1   Troy Batchelor
1   Mike Smith
2   Chris Portman
3   Sara Oldman
3   Greg House

Понятия не имею, что делать.Нужно ли использовать какую-то процедуру или достаточно простого запроса?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Я решил вашу проблему без использования какой-либо функции или хранимой процедуры

SELECT ID,Workers FROM tblSemiColon


SELECT ID,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Workers
FROM
(
SELECT ID,CAST('<XMLRoot><RowData>' + REPLACE(Workers,';','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM   tblSemiColon
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

enter image description here

, это будет работать на всех версиях сервера sql.Я проверил это ....

Вы можете уменьшить размер длины varchar ..

0 голосов
/ 11 июля 2019

Если вы используете sql-сервер 2016 или выше, вы можете использовать функцию STRING_SPLIT

SELECT id,  value  
FROM Tasks
    CROSS APPLY STRING_SPLIT(Workers, ';') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...