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 结尾的名称的主要内容,如果未能解决你的问题,请参考以下文章

用于检查名称是不是以元音开头和结尾的 SQL 查询

正则表达式:数字开头中间字母结尾数字

查询以查找 SQL 查询中上一行的更改

字符串常量必须以双引号结尾 SQL 报告

在 SQL 中,我想显示所有以元音结尾的城市的名称

SQL 查询以查找该月的最后一天