按分隔符解析 SQL 中的列
Parse Columns in SQL by delimiter
在 SQL 服务器中,我有一个有多个列的 table/view。最后一列如下所示:
COL
---------------------------------
|test|test|test11|testing|final
|test|test|test1|testing2|final3
|test|test|test17|testing|final6
如何通过 |
解析此列并将其与现有 table 的右侧合并,如下所示:
COL1 COL2 COL Parse1 Parse2 Parse3 Parse4 Parse5
1 4 |test|test|test11|testing|final test test test11 testing final
2 6 |test|test|test1|testing2|final3 test test test1 testing2 final3
5 9 |test|test|test17|testing|final6 test test test17 testing final6
第 COL
列的解析次数相同。
如有帮助将不胜感激!
不清楚字段 COL
中是否有前导 |
。如果是这样,您可能需要转移 /x[n]
模式很清楚。根据需要轻松扩展或收缩
例子
Declare @YourTable Table ([COL] varchar(50))
Insert Into @YourTable Values
('test|test|test11|testing|final')
,('test|test|test1|testing2|final3')
,('test|test|test17|testing|final6')
Select A.*
,B.*
From @YourTable A
Cross Apply (
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
From (Select Cast('<x>' + replace((Select replace(A.Col,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as B1
) B
Returns
在 SQL 服务器中,我有一个有多个列的 table/view。最后一列如下所示:
COL
---------------------------------
|test|test|test11|testing|final
|test|test|test1|testing2|final3
|test|test|test17|testing|final6
如何通过 |
解析此列并将其与现有 table 的右侧合并,如下所示:
COL1 COL2 COL Parse1 Parse2 Parse3 Parse4 Parse5
1 4 |test|test|test11|testing|final test test test11 testing final
2 6 |test|test|test1|testing2|final3 test test test1 testing2 final3
5 9 |test|test|test17|testing|final6 test test test17 testing final6
第 COL
列的解析次数相同。
如有帮助将不胜感激!
不清楚字段 COL
中是否有前导 |
。如果是这样,您可能需要转移 /x[n]
模式很清楚。根据需要轻松扩展或收缩
例子
Declare @YourTable Table ([COL] varchar(50))
Insert Into @YourTable Values
('test|test|test11|testing|final')
,('test|test|test1|testing2|final3')
,('test|test|test17|testing|final6')
Select A.*
,B.*
From @YourTable A
Cross Apply (
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
From (Select Cast('<x>' + replace((Select replace(A.Col,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as B1
) B
Returns