问题描述
我正在努力使用SQL Server 2008找到正确的函数来纠正出现的任何字符串,例如: \\ myserver \ mydir1 \ dir2 \ test.txt
或 \\ myserver2 \ dir1\ dir2 \ dir3 \ test.txt
.
I'm struggling to find the right functions with SQL Server 2008 to rectify any strings coming like: \\myserver\mydir1\dir2\test.txt
or \\myserver2\dir1\dir2\dir3\test.txt
.
最后,结果应显示为: \\ myserver \ mydir1 \ dir2
或 \\ myserver2 \ dir1 \ dir2 \ dir3
,因此在最后一个"\"
,应删除子字符串.
At the end, the result should appear like: \\myserver\mydir1\dir2
or \\myserver2\dir1\dir2\dir3
, So after the last "\"
, the substring should be removed.
有什么想法吗?
推荐答案
DECLARE @urls TABLE (URL varchar(2000))
INSERT @urls VALUES ('\\myserver\mydir1\dir2\test.txt')
INSERT @urls VALUES ('\\myserver2\dir1\dir2\dir3\test.txt')
SELECT
REVERSE(SUBSTRING(REVERSE(URL), CHARINDEX('\', REVERSE(URL))+1, 8000))
FROM
@urls
逻辑:
-
\\ myserver \ mydir1 \ dir2 \ test.txt
- REVERSE =
txt.tset \ 2rid \ 1ridym \ revresym \
- 寻找第一个
\
- 在那之后拿走所有东西SUBSTRING =
2rid \ 1ridym \ revresym \
- REVERSE =
\\ myserver \ mydir1 \ dir2
您不需要知道SUBSTRING的字符串的LEN,因此只需使用8000
You don't need to know the LEN of the string for the SUBSTRING so just use 8000
在评论使用8000后进行编辑
Edit, after comment about using 8000
- 您可以在SUBSTRING中使用2147483647,因为它支持最大类型
- 仅必须等于或大于varchar变量或列长度
- 计算LEN的开销如何?
- 实际上,所有网址都必须符合 2083个字节
- 有关系吗?过早优化"等
这篇关于T SQL如何通过删除最后一个定界符之后的所有部分来修改字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!