我有這個字符串E:\patient\services\ec
。如何在tsql中的特殊字符之間提取字符串
我需要提取第二個和第三個'\'之間的單詞。它將永遠在他們之間,但這個詞可能會改變。
我的結果應該是這個例子中的服務。
我有這個字符串E:\patient\services\ec
。如何在tsql中的特殊字符之間提取字符串
我需要提取第二個和第三個'\'之間的單詞。它將永遠在他們之間,但這個詞可能會改變。
我的結果應該是這個例子中的服務。
用途:
int secondInstance = myString.IndexOf('\', myString.IndexOf('\') + 1);
int thirdInstance = myString.IndexOf('\', myString.IndexOf('\', myString.IndexOf('\') + 1) + 1);
,將讓你\(反斜槓)的第二個實例
這應該是足以讓你得到你所需要的。
Woops,才意識到這是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))
我試圖用列名代替。但是我得到的錯誤無效的長度參數傳遞給左側或子字符串函數。 – user3115719
oops我從表中更改了@exp = select列。我也將nvarchar更改爲100 – user3115719
@ user3115719是否有任何問題? –
替換爲「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)')
你試過什麼了嗎?你得到什麼錯誤? – BWS
你能接受答案嗎?我建議@ Anon的回答 –