Sql server 如何在tsql中提取特殊字符之间的字符串

Sql server 如何在tsql中提取特殊字符之间的字符串,sql-server,tsql,Sql Server,Tsql,我有一个字符串E:\patient\services\ec 我需要提取第二个和第三个“\”之间的单词。这将永远是他们之间的事,但这个词可能会改变 我的结果应该是本例中的服务。使用: int secondInstance = myString.IndexOf('\', myString.IndexOf('\') + 1); int thirdInstance = myString.IndexOf('\', myString.IndexOf('\', myString

我有一个字符串E:\patient\services\ec

我需要提取第二个和第三个“\”之间的单词。这将永远是他们之间的事,但这个词可能会改变

我的结果应该是本例中的服务。

使用:

        int secondInstance = myString.IndexOf('\', myString.IndexOf('\') + 1);
        int thirdInstance = myString.IndexOf('\', myString.IndexOf('\', myString.IndexOf('\') + 1) + 1);
这将获得\backslax的第二个实例

这应该足以让你得到你需要的


呜呜,刚刚意识到这是为了TSQL…

试试这个。。。愿它对你有用

    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
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))

将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)')

你试过什么了吗?你有什么错误?你能接受答案吗?我建议@Anon的回答我试着用一个列名来代替。但我得到了错误无效的长度参数传递给left或substring函数。oops我更改了表中的@exp=select列。我还把nvarchar换成了100@user3115719有什么问题吗?