分析sql server中包含路径值的列

分析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 如果未知,则必须使用

如何在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

如果未知,则必须使用动态

示例

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