我的数据库中有类似的条目:
Col1
---------
test\abcd\123\
test\abc\
test\abc\12\
test\abcdefg\1234\
我想修剪字符串,以便得到:abcd
或abc
(两个反斜杠之间的中间部分)
我已经尝试过这段代码,但是它不起作用(剪切太多)
SELECT SUBSTRING(col1, CHARINDEX('\',col1) + 1, CHARINDEX('\',col1,CHARINDEX('\',col1)) + 1)
我只需要两个反斜线之间的中间部分。
答案 0 :(得分:2)
您可以将第一个和第二个反斜杠之间的字符串提取为
with t(col1) as
(
select 'test\abc\123\' union all
select 'test\abc\' union all
select 'test\abc\12\' union all
select 'test\abcdefg\1234\'
)
select SUBSTRING(
col1,
CHARINDEX('\',col1)+1,
CHARINDEX('\',col1,CHARINDEX('\',col1)+1)-
CHARINDEX('\',col1)-1
)
from t;
Result String
-------------
abc
abc
abc
abcdefg
编辑(相对于使用少于两个反斜杠的col1值的可能性):
select SUBSTRING(
col1,
CHARINDEX('\',col1)+1,
CHARINDEX('\',col1,CHARINDEX('\',col1)+1)-
CHARINDEX('\',col1)-1
)
from t
where len(col1) - len(replace(col1,'\','')) >= 2
将它们完全过滤掉。
或
select case when len(col1) - len(replace(col1,'\','')) >= 2 then
SUBSTRING(
col1,
CHARINDEX('\',col1)+1,
CHARINDEX('\',col1,CHARINDEX('\',col1)+1)-
CHARINDEX('\',col1)-1
)
else
col1
end
as "Result String"
from t
显示所有行,将所有行保留为破坏规则。