我正在尝试解析这个字符串:
'200|50| [email protected] |09\23\2016|07:00:00'
分成 5 列,我感到很沮丧。
分隔符是管道|
字段不固定,所以我需要使用 charindex 来查找分隔符的位置?
请帮忙 谢谢
最佳答案
另一种选择如下。这可以烘焙到 TVF 甚至交叉应用中
Declare @String varchar(max) = '200|50|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="afc5c081dbc7efd7d7d781ccc0c2" rel="noreferrer noopener nofollow">[email protected]</a>|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
返回
Edit - To Use in a Cross Apply - Easy to expand/contract
Declare @YourTable table (ID int,SomeString varchar(max))
Insert Into @YourTable values
(1,'200|50|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7c16135208143c040404521f1311" rel="noreferrer noopener nofollow">[email protected]</a>|09\23\2016|07:00:00'),
(2,'400|99|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a5cfc4c8c0d68bd1cde5dddddd8bc6cac8" rel="noreferrer noopener nofollow">[email protected]</a>|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
返回
关于t-sql - TSQL 解析带有 4 个分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40609102/