我需要一个SQL查询,它允许我将一个列拆分成多个列。 例如: 数据集1 =" 10.11.5-None-bobadmin:501 -1-1-87-PASS-11.1.0.9900-true" 将基于" - "分隔列分隔。字符。 数据集将返回以下内容
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9
10.11.5 None bobadmin:501 1 1 87 PASS 11.1.0.9900 TRUE
非常感谢任何和所有的帮助!
使用SQL Server 2008R2
答案 0 :(得分:0)
在下面的示例中,我有9个职位,但很容易扩展到您需要的数量
Declare @YourTable table (ID int,DataSet1 varchar(100))
Insert Into @YourTable values
(1,'10.11.5-None-bobadmin:501 -1-1-87-PASS-11.1.0.9900-true'),
(2,'10.11.6-All-JaneAdmin:999 -9-9-99-FAIL-12.2.2.555-false')
Select A.ID
,B.*
From @YourTable A
Cross Apply (
Select Col1 = xDim.value('/x[1]','varchar(max)')
,Col2 = xDim.value('/x[2]','varchar(max)')
,Col3 = xDim.value('/x[3]','varchar(max)')
,Col4 = xDim.value('/x[4]','varchar(max)')
,Col5 = xDim.value('/x[5]','varchar(max)')
,Col6 = xDim.value('/x[6]','varchar(max)')
,Col7 = xDim.value('/x[7]','varchar(max)')
,Col8 = xDim.value('/x[8]','varchar(max)')
,Col9 = xDim.value('/x[9]','varchar(max)')
From (Select Cast('<x>' + Replace(A.DataSet1,'-','</x><x>')+'</x>' as XML) as xDim) A
) B
返回
修改强>
或者如果你想要一个UDF
Select * from [dbo].[udf-Str-Parse-Row]('10.11.5-None-bobadmin:501 -1-1-87-PASS-11.1.0.9900-true','-')
返回
UDF(如果需要)
CREATE FUNCTION [dbo].[udf-Str-Parse-Row] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
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,@Delimiter,'</x><x>')+'</x>' as XML) as xDim) A
)
--Select * from [dbo].[udf-Str-Parse-Row]('Dog,Cat,House,Car',',')