2016-09-07 2 views
1

Пусть говорят, у меня есть данныеТранспонирование запятых данных в строки - некоторые разъяснения

ID String 
------------------- 
1  John, Adam 

На основе ниже запроса транспонировать запятые данных в ряды

SELECT A.[ID], 
    Split.a.value('.', 'VARCHAR(100)') AS String 
FROM (SELECT [ID], 
     CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String 
    FROM TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 

Теперь я хотел бы знаете, в чем причина, что в нашем запросе есть '.' и <M>?

PN: Вместо того, чтобы помечать сообщение, пожалуйста, дайте мне знать. Я удалю сообщение, если оно не должно быть опубликовано.

ответ

0

Если вы распечатываете строку в CAST, вы увидите, что ваша текстовая строка была преобразована в строку XML. «.» в команде split - это просто место, в которое нужно начать синтаксический анализ XML.

+0

Не получить его, если я выбираю эту часть только 'SELECT [ID], CAST ('' + ЗАМЕНИТЬ ([строка], ' '' ') +'' AS XML) AS строка FROM TableA' я получить строку, как этот ' Джон Адамс' –

0

Если SQL Server 2016 вы можете использовать string_split

create table commasep 
( 
id int identity(1,1) 
,string nvarchar(100) 
) 

insert into commasep (string) values ('John, Adam'), ('test1,test2,test3') 

select id, [value] as String from commasep 
cross apply string_split(string,',')