查找以\\filename结尾的名称的sql查询

js4nwp54  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(292)

有没有办法找到一个表中以双斜杠结尾的所有记录。 \\Test Sample.pdf ```
DocPath ->
\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\Test Sample.pdf

我试过了,但没有结果:

SELECT * FROM Reports WHERE DocPath LIKE '[\*.]$'

vvppvyoh

vvppvyoh1#

字符串操作不是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数据流组件(源代码或转换)中使用.NETregexps,这样做会更加优雅;
对于必须在数据库中发生的任何类型的oltp bau活动,我可能会求助于clr函数,它将提供与上面相同的c#/vb.net功能。
p、 请记住 string_split() 函数至少需要sql server 2016和数据库兼容级别130。

lg40wkob

lg40wkob2#

可以使用以下表达式:

select right(DocPath, charindex('\\', reverse(DocPath)) + 1)

上面的代码提取最后一个双反斜杠后面的部分,这似乎是您想要的。
但是,对查询的更直接的解释表明您需要:

SELECT *
FROM Reports
WHERE DocPath LIKE '%\\Test Sample.pdf'

相关问题