我有这个字符串E:\patient\services\ec
。
我需要在第二个和第三个'\'之间提取单词。它总是在它们之间,但这个词可能会改变。
我的结果应该是此示例中的服务。
答案 0 :(得分:1)
将“E:\ patient \ services \ ec”替换为<E/><patient/><services/><ec/>
并选择第三个xml元素。
DECLARE @test varchar(max) = 'E:\patient\services\ec'
SELECT CAST('<'+REPLACE(REPLACE(@test,':',''),'\','/><')+'/>' as xml).value('local-name(/*[3])','varchar(max)')
答案 1 :(得分:0)
使用:
int secondInstance = myString.IndexOf('\', myString.IndexOf('\') + 1);
int thirdInstance = myString.IndexOf('\', myString.IndexOf('\', myString.IndexOf('\') + 1) + 1);
那会得到\(反斜杠)的第二个实例
这应该足以让你得到你需要的东西。
Woops,刚刚意识到这是针对TSQL的......
答案 2 :(得分:0)
declare @a varchar (100)
set @a = 'E:\patient\services\ec'
declare @b int,
@c int,
@len int
set @len = len (@a)
set @a=REVERSE ( @a )
select @b=CHARINDEX ( '\' ,@a, 0 )
set @a= SUBSTRING ( @a ,@b+1 , @len )
set @a = reverse (@a)
while CHARINDEX ( '\' ,@a, 0 ) > 0
begin
set @a= SUBSTRING ( @a ,@b+1 , @len )
select @b=CHARINDEX ( '\' ,@a, 0 )
set @a= SUBSTRING ( @a ,@b+1 , @len )
end
print @a
答案 3 :(得分:0)
试试这个......可能会对你有用......
DECLARE @exp AS NVARCHAR(50)
SET @exp = 'E:\patient\services\ec'
DECLARE @chr AS NVARCHAR(1)
SET @chr = '\'
DECLARE @sub AS NVARCHAR(50)
SET @sub = REPLACE(@exp,
RTRIM(SUBSTRING(@exp, 1,
CHARINDEX(@chr, @exp,
CHARINDEX(@chr, @exp) + 2))), '')
-- My Query
SELECT RTRIM(SUBSTRING(@exp,
CHARINDEX(@chr, @exp, CHARINDEX(@chr, @exp) + 2) + 1,
LEN(SUBSTRING(@sub, 1, CHARINDEX(@chr, @sub))) - 1))