t-sql - TSQL 解析带有 4 个分隔符的字符串

标签 t-sql split delimiter

我正在尝试解析这个字符串:

'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

返回

enter image description here

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

返回

enter image description here

关于t-sql - TSQL 解析带有 4 个分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40609102/

相关文章:

java - 分隔 arraylist 中的每个项目

sql-server - TSQL - 更好的 INT 转换函数

sql - Mysql服务器/数据库的维护步骤和性能步骤是什么?

R - 将多行并排连接成一行

java - 如何将 ^M 分成单独的行?

c++ - 如何使用定界符将 vector<char> 拆分为字符串

sql - 嵌套where语句

sql-server - 在更改跟踪中禁用列更新

python - 在 python 中打印字符串中的一个单词

javascript - 如何使用 .split 防止在引号逗号处拆分?