SQL 查询以查找以 \\FileName 结尾的名称
Posted
技术标签:
【中文标题】SQL 查询以查找以 \\\\FileName 结尾的名称【英文标题】:SQL Query to find name ending with \\FileNameSQL 查询以查找以 \\FileName 结尾的名称 【发布时间】:2020-07-22 00:49:44 【问题描述】:有没有办法找到表中以双斜杠结尾的所有记录,例如\\Test Sample.pdf
DocPath ->
\\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\\Test Sample.pdf
我试过了,但没有结果:
SELECT * FROM Reports WHERE DocPath LIKE '[\\*.]$'
【问题讨论】:
您是否考虑过使用 SPLIT_STRING 函数:docs.microsoft.com/en-us/sql/t-sql/functions/… SQL Server 不支持正则表达式。试试 LIKE '%\\%' 。 你的第一句话没有意义。第一条记录不会“结束”它们有列。双斜杠位于字符串的开头而不是结尾。 【参考方案1】:字符串操作不是 T-SQL 的强项,因此执行所需操作的代码会运行缓慢且看起来很丑陋。不过,这样的事情可能会奏效:
select t.Id, t.DocPath, ss.value
from (values
(1, '\\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\\Test Sample.pdf'),
(2, '\\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\Test Sample.pdf'),
(3, '\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\Test Sample.pdf'),
(4, '\Main Documents\\ROR456\ABC-1C9MUWP00B0-0022\Test Sample.pdf')
) t (Id, DocPath)
cross apply string_split(replace(t.DocPath, '\\', '['), '[') ss
where ss.value not like '%\%'
and ss.value > ''
and ss.value like '%.%';
如果我需要处理大量记录,我会考虑另一种方法。从头顶上掉下来:
如果是某种 ETL 过程,我会在 SSIS 数据流组件(源或转换)中使用 .NET 正则表达式,这样可以更优雅地完成这项工作; 对于必须在数据库中发生的任何类型的 OLTP BAU 活动,我可能会求助于 CLR 函数,该函数将提供与上述相同的 C#/VB.Net 功能。附:请记住,string_split()
函数至少需要 SQL Server 2016 和数据库兼容性级别 130。
【讨论】:
【参考方案2】:你可以使用这个表达式:
select right(DocPath, charindex('\\', reverse(DocPath)) + 1)
上面提取了最后一个双反斜杠之后的部分,这似乎是你想要的。
但是,对查询的更字面解释表明您想要:
SELECT *
FROM Reports
WHERE DocPath LIKE '%\\Test Sample.pdf'
【讨论】:
查询中的表名在哪里??你能写完整的查询吗?以上是关于SQL 查询以查找以 \\FileName 结尾的名称的主要内容,如果未能解决你的问题,请参考以下文章