有没有办法找到一个表中以双斜杠结尾的所有记录。 \\Test Sample.pdf ```DocPath ->\Main Documents\ROR456\ABC-1C9MUWP00B0-0022\Test Sample.pdf
\\Test Sample.pdf
我试过了,但没有结果:
SELECT * FROM Reports WHERE DocPath LIKE '[\*.]$'
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。
string_split()
lg40wkob2#
可以使用以下表达式:
select right(DocPath, charindex('\\', reverse(DocPath)) + 1)
上面的代码提取最后一个双反斜杠后面的部分,这似乎是您想要的。但是,对查询的更直接的解释表明您需要:
SELECT * FROM Reports WHERE DocPath LIKE '%\\Test Sample.pdf'
2条答案
按热度按时间vvppvyoh1#
字符串操作不是t-sql的强项,因此执行所需操作的代码将运行缓慢,而且看起来很难看。然而,类似的事情可能会起作用:
如果我需要处理大量的记录,我会考虑另一种方法。从头顶:
如果是某种etl过程,我会在ssis数据流组件(源代码或转换)中使用.NETregexps,这样做会更加优雅;
对于必须在数据库中发生的任何类型的oltp bau活动,我可能会求助于clr函数,它将提供与上面相同的c#/vb.net功能。
p、 请记住
string_split()
函数至少需要sql server 2016和数据库兼容级别130。lg40wkob2#
可以使用以下表达式:
上面的代码提取最后一个双反斜杠后面的部分,这似乎是您想要的。
但是,对查询的更直接的解释表明您需要: