表中的值类似于带有连字符的 12-43-5765-234-56-24-6456-234-678-9-0-0
我需要将第一个值作为单独的列,将第二个值作为单独的列,依此类推。
我尝试过这样的。
DECLARE @S VARCHAR(MAX);
SET @S = '12-43-5765-234-56-24-6456-234-678-9-0-0'
SELECT SUBSTRING(@S, 0, CHARINDEX('-', @S)) AS first
上面的查询仅选择第一个值,但是如何从字符串中提取第四个和第五个值?就像
12 as first,
43 as second,
5765 as third,
234 as fourth,
56 as fifth,
24 as sixth and so on..
最佳答案
如果您的职位数量达到上限(或已知),并且不想想要动态
示例
DECLARE @S VARCHAR(MAX);
SET @S='12-43-5765-234-56-24-6456-234-678-9-0-0'
Select Pos1 = xDim.value('/x[1]','varchar(max)') --could change to desired datatype (int ?)
,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)')
,Pos10= xDim.value('/x[10]','varchar(max)')
,Pos11= xDim.value('/x[11]','varchar(max)')
,Pos12= xDim.value('/x[12]','varchar(max)')
,Pos13= xDim.value('/x[13]','varchar(max)')
From (Select Cast('<x>' + replace(@S,'-','</x><x>')+'</x>' as xml) as xDim) as A
返回
关于sql - 从 SQL Server 表中的连字符字符串列中提取第 1 个、第 2 个、第 3 个值,直到第 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514957/