如何在sql中的特殊字符之间提取字符串

时间:2013-12-18 15:20:25

标签: sql-server tsql

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

我需要在第二个和第三个'\'之间提取单词。它总是在它们之间,但这个词可能会改变。

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

4 个答案:

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