分析sql server中包含路径值的列
如何在SQL Server中解析包含URL路径值的列 输入分析sql server中包含路径值的列,sql,sql-server,tsql,split,Sql,Sql Server,Tsql,Split,如何在SQL Server中解析包含URL路径值的列 输入 sites/System1/DocLib1/Folder1/SubFolder/File.pdf 应返回: Column 1 - Column 2 - Column 3- Column 4- Column 5 - Column 6 sites System1 DocLib1 Folder1 SubFolder File.pdf 每行的路径值不同如果有已知或最大级别数,可以使用少量XML 如果未知,则必须使用
sites/System1/DocLib1/Folder1/SubFolder/File.pdf
应返回:
Column 1 - Column 2 - Column 3- Column 4- Column 5 - Column 6
sites System1 DocLib1 Folder1 SubFolder File.pdf
每行的路径值不同如果有已知或最大级别数,可以使用少量XML 如果未知,则必须使用动态 示例
Declare @yourtable table (id int,url varchar(500))
Insert Into @yourtable values
(1,'sites/System1/DocLib1/Folder1/SubFolder/File.pdf')
Select A.id
,B.*
From @yourtable A
Cross Apply (
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
From (Select Cast('<x>' + replace(url,'/','</x><x>')+'</x>' as xml) as xDim) as A
) B
您是否确切地知道希望结果始终有多少列?SQL不会根据数据给出不同的列数。另一个重要的问题是,你为什么要这样做?如果我们了解您打算如何利用结果,可能会有更好的方法。
id Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 Pos9
1 sites System1 DocLib1 Folder1 SubFolder File.pdf NULL NULL NULL