使用子字符串提取文件路径
Extracting file paths using substring
我正在尝试提取文件名(已经成功),然后将每个文件路径目标放在自己的列中。
示例文件路径:mps://Global/Test/Health/Reports/file.html
预期结果(在四个单独的列中):
File.html Reports Health Test Global
我的实际结果(只有两列):
File.html mps://Global/Test/Health/Reports
我的查询:
select
RIGHT(filepath, CHARINDEX('/', REVERSE(filepath)) -1) AS ReportName
LEFT(filepath,LEN(filepath) - charindex('/',reverse(filepath),1) + 1) AS ReportPath,
from LOG;
我一直在努力弄清楚如何提取各自列中每个“/”之间的每条路径。我已经为四个单独的列尝试了许多 charindex 更改,但是我无法摆脱字符串的左侧和右侧。有任何想法吗?
试着把它变成 XML 然后定位 "nodes";
declare @yak varchar(100) = 'mps://Global/Test/Health/Reports/file.html';
declare @x xml = cast('<r><i>' + replace(replace(@yak, 'mps://', ''), '/', '</i><i>') + '</i></r>' as xml);
select [Col1] = r.n.value('i[1]', 'varchar(100)'),
[Col2] = r.n.value('i[2]', 'varchar(100)'),
[Col3] = r.n.value('i[3]', 'varchar(100)'),
[Col4] = r.n.value('i[4]', 'varchar(100)'),
[Col5] = r.n.value('i[5]', 'varchar(100)'),
[Col6] = r.n.value('i[6]', 'varchar(100)')
from @x.nodes('r')r(n);
Returns:
Col1 Col2 Col3 Col4 Col5 Col6
---- ---- ---- ---- ---- ----
Global Test Health Reports file.html NULL
我想您可能需要 string_split 功能。 ISTR 是一个专门用于将文件名解析为 4 个部分(驱动器、目录、基址、扩展名)的函数,但也许它在 C 运行时库中。
您可能希望在 charindex 内部使用 case when,尤其是当某些文件路径为空时。
我正在尝试提取文件名(已经成功),然后将每个文件路径目标放在自己的列中。
示例文件路径:mps://Global/Test/Health/Reports/file.html
预期结果(在四个单独的列中):
File.html Reports Health Test Global
我的实际结果(只有两列):
File.html mps://Global/Test/Health/Reports
我的查询:
select
RIGHT(filepath, CHARINDEX('/', REVERSE(filepath)) -1) AS ReportName
LEFT(filepath,LEN(filepath) - charindex('/',reverse(filepath),1) + 1) AS ReportPath,
from LOG;
我一直在努力弄清楚如何提取各自列中每个“/”之间的每条路径。我已经为四个单独的列尝试了许多 charindex 更改,但是我无法摆脱字符串的左侧和右侧。有任何想法吗?
试着把它变成 XML 然后定位 "nodes";
declare @yak varchar(100) = 'mps://Global/Test/Health/Reports/file.html';
declare @x xml = cast('<r><i>' + replace(replace(@yak, 'mps://', ''), '/', '</i><i>') + '</i></r>' as xml);
select [Col1] = r.n.value('i[1]', 'varchar(100)'),
[Col2] = r.n.value('i[2]', 'varchar(100)'),
[Col3] = r.n.value('i[3]', 'varchar(100)'),
[Col4] = r.n.value('i[4]', 'varchar(100)'),
[Col5] = r.n.value('i[5]', 'varchar(100)'),
[Col6] = r.n.value('i[6]', 'varchar(100)')
from @x.nodes('r')r(n);
Returns:
Col1 Col2 Col3 Col4 Col5 Col6
---- ---- ---- ---- ---- ----
Global Test Health Reports file.html NULL
我想您可能需要 string_split 功能。 ISTR 是一个专门用于将文件名解析为 4 个部分(驱动器、目录、基址、扩展名)的函数,但也许它在 C 运行时库中。
您可能希望在 charindex 内部使用 case when,尤其是当某些文件路径为空时。