我正在尝试解析此字符串:
'200 | 50 | [email protected] | 09 \ 23 \ 2016 | 07:00:00'
分成5列,我感到沮丧。
分隔符是管道|
字段不是固定的,因此我需要使用charindex来查找定界符的位置?
请帮忙谢谢
另一种选择如下。可以将其烘焙到TVF中,甚至进行交叉应用
Declare @String varchar(max) = '200|50|[email protected]|09\23\2016|07:00:00'
Select Pos1 = xDim.value('/x[1]','varchar(max)')
,Pos2 = xDim.value('/x[2]','varchar(max)')
,Pos3 = xDim.value('/x[3]','varchar(max)')
,Pos4 = xDim.value('/x[4]','varchar(max)')
,Pos5 = xDim.value('/x[5]','varchar(max)')
,Pos6 = xDim.value('/x[6]','varchar(max)')
,Pos7 = xDim.value('/x[7]','varchar(max)')
,Pos8 = xDim.value('/x[8]','varchar(max)')
,Pos9 = xDim.value('/x[9]','varchar(max)')
From (Select Cast('<x>' + Replace(@String,'|','</x><x>')+'</x>' as XML) as xDim) A
退货
编辑-交叉使用-易于扩展/收缩
Declare @YourTable table (ID int,SomeString varchar(max))
Insert Into @YourTable values
(1,'200|50|[email protected]|09\23\2016|07:00:00'),
(2,'400|99|[email protected]|11\15\2016|09:00:00')
Select A.ID
,B.*
From @YourTable A
Cross Apply (
Select Pos1 = xDim.value('/x[1]','varchar(max)')
,Pos2 = xDim.value('/x[2]','varchar(max)')
,Pos3 = xDim.value('/x[3]','varchar(max)')
,Pos4 = xDim.value('/x[4]','varchar(max)')
,Pos5 = xDim.value('/x[5]','varchar(max)')
,Pos6 = xDim.value('/x[6]','varchar(max)')
,Pos7 = xDim.value('/x[7]','varchar(max)')
,Pos8 = xDim.value('/x[8]','varchar(max)')
,Pos9 = xDim.value('/x[9]','varchar(max)')
From (Select Cast('<x>' + Replace(A.SomeString,'|','</x><x>')+'</x>' as XML) as xDim) A
) B
退货
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句