如果你只是想分割,交换数量和PK,试试这个;
DECLARE @S VARCHAR(max)= 'Q1 PK1 ITM1 D1,Q2 PK2 ITM2 D2'
DECLARE @X XML
SELECT @X = '<myxml><n><d>' +
REPLACE (@S,',','</d></n><n><d>') + '</d></n></myxml>'
SELECT SUBSTRING(x,firstSpace,secondSpace-firstSpace) + ' ' +
SUBSTRING(x,1,firstSpace) + ' ' +
SUBSTRING(x,secondSpace,len(x))
FROM ( --Getting CharIndex of first and second spaces
SELECT x, CHARINDEX(' ',x,1) firstSpace, CHARINDEX(' ',x,CHARINDEX(' ',x,1)+1) secondSpace
FROM ( --Spliting by "," into records
SELECT C.value('d[1]','VARCHAR(50)') x
FROM @X.nodes('/myxml/n') Cols (C) ) T1
) T2
SQL小提琴在这里
--Data
'Q1 PK1 ITM1 D1,Q2 PK2 ITM2 D2'
--Results
'PK1 Q1 ITM1 D1'
'PK2 Q2 ITM2 D2'
如果你想把它们分成几列,那么试试这个;
DECLARE @S VARCHAR(500)= 'Q1 PK1 ITM1 D1,Q2 PK2 ITM2 D2'
DECLARE @X XML
SELECT @X = '<myxml><n><d>' +
REPLACE(REPLACE (@S,',','</d></n><n><d>'), ' ', '</d><d>') +
'</d></n></myxml>'
SELECT C.value('d[2]','VARCHAR(50)') PK,
C.value('d[1]','VARCHAR(50)') Qty,
C.value('d[3]','VARCHAR(50)') Item,
C.value('d[4]','VARCHAR(50)') Description
FROM @X.nodes('/myxml/n') Cols (C)
SQL小提琴在这里
--Data
'Q1 PK1 ITM1 D1,Q2 PK2 ITM2 D2'
--Results
PK1 | Q1 | ITM1 | D1
PK2 | Q2 | ITM2 | D2