sql-server - 在SQL Server 2012中将字符串拆分为一行

标签 sql-server string split delimiter

字符串位于

@txt nvarchar(max)='2450,10,54,kb2344,kd5433;87766,500,100,ki5332108,ow092827'

我想要这样的输出:

ID。瓦尔1。瓦尔2。瓦尔3。瓦尔4。 Val5。
1。 2450 10 54 kb2344 kd5433。
2。 87766 500 100 ki5332108 ow09287

有人可以建议如何做到这一点吗?

我用谷歌搜索,找到了这个解决方案。但它适用于两个逗号分隔的值,但在我的例子中有五个:

 DECLARE @Var NVARCHAR(100) = '2450,10,54,kb2344,kd5433;87766,500,100,ki5332108,ow092827'
 SELECT LEFT(@Var, CHARINDEX(';', @Var) - 1) ,SUBSTRING(@Var, CHARINDEX(';', @Var) + 1, LEN(@Var)- LEN(LEFT(@Var, CHARINDEX(';', @Var)))- LEN(RIGHT(@Var, CHARINDEX(';', REVERSE(@Var))))) AS [Job] , RIGHT(@Var, CHARINDEX(';', REVERSE(@Var))-1)

最佳答案

假设值 1-5。这可以通过一些 XML 与 CROSS APPLY 配合轻松完成

如果数字列是可变的,则必须使用动态。

EDIT - Changed to nvarchar

示例

Declare @txt  nvarchar(max)='2450,10,54,kb2344,kd5433;87766,500,100,ki5332108,ow092827'

Select ID=A.RetSeq
      ,B.*
 From (
        Select RetSeq = Row_Number() over (Order By (Select null)) 
              ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'nvarchar(max)')))
        From  (Select x = Cast('<x>' + replace(@txt ,';','</x><x>')+'</x>' as xml).query('.')) as A 
        Cross Apply x.nodes('x') AS B(i)
      ) A
 Cross Apply (
                Select Val1 = ltrim(rtrim(xDim.value('/x[1]','nvarchar(max)')))
                      ,Val2 = ltrim(rtrim(xDim.value('/x[2]','nvarchar(max)')))
                      ,Val3 = ltrim(rtrim(xDim.value('/x[3]','nvarchar(max)')))
                      ,Val4 = ltrim(rtrim(xDim.value('/x[4]','nvarchar(max)')))
                      ,Val5 = ltrim(rtrim(xDim.value('/x[5]','nvarchar(max)')))
                From  (Select Cast('<x>' + replace(A.RetVal,',','</x><x>')+'</x>' as xml) as xDim) as B1
             ) B

返回

ID  Val1    Val2    Val3    Val4        Val5
1   2450    10      54      kb2344      kd5433
2   87766   500     100     ki5332108   ow092827

关于sql-server - 在SQL Server 2012中将字符串拆分为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377035/

相关文章:

.net - 与 SQL DB 的同步框架 : Getting Started

sql-server - 计算表中出现的次数

java - Java中使用InputStreamReader类时缺少字符

python - 除非分隔符后跟特定模式,否则如何在分隔符处拆分字符串?

java - 如何在这一行中拆分日期?

sql - 违反 UNIQUE KEY 约束无法在对象中插入重复的键

php - 如何在php中将字符串中的字母和数字分开

c# - 拆分字符串和字符串数组

javascript - jQuery:如何在不同的字符串中添加一个<br/>换行符来分隔2中的句子?

sql-server - PostgreSQL 找到两个时间戳之间的中点