2013-12-18 68 views
0

我有這個字符串E:\patient\services\ec如何在tsql中的特殊字符之間提取字符串

我需要提取第二個和第三個'\'之間的單詞。它將永遠在他們之間,但這個詞可能會改變。

我的結果應該是這個例子中的服務。

+3

你試過什麼了嗎?你得到什麼錯誤? – BWS

+0

你能接受答案嗎?我建議@ Anon的回答 –

回答

0

用途:

 int secondInstance = myString.IndexOf('\', myString.IndexOf('\') + 1); 
     int thirdInstance = myString.IndexOf('\', myString.IndexOf('\', myString.IndexOf('\') + 1) + 1); 

,將讓你\(反斜槓)的第二個實例

這應該是足以讓你得到你所需要的。

Woops,才意識到這是TSQL ...

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

我試圖用列名代替。但是我得到的錯誤無效的長度參數傳遞給左側或子字符串函數。 – user3115719

+0

oops我從表中更改了@exp = select列。我也將nvarchar更改爲100 – user3115719

+0

@ user3115719是否有任何問題? –

1

替換爲「E:\耐心\服務\ 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)') 
相關問題