2010-04-09 108 views
1

我有一個coloumn名稱與varchar字段,其中保存一些文件夾路徑,如「C:\ Program Files \ Internet Explorer \ en-US」。我需要更新根文件夾名稱程序文件到profiles新)。任何人都可以請幫助。 我試着查詢分隔字符串與分隔符在sql服務器

declare @val as varchar(100) 
set @val='C:\Program Files\Internet Explorer\en-US' 

select substring(@val,charindex(':\',@val),charindex('\',@val)) 

,但沒有得到確切的答案

C:\Program FilesNew\Internet Explorer\en-US 

回答

0

爲什麼不使用,而不是更換?

declare @val as varchar(100) set @val='C:\Program Files\Internet Explorer\en-US' 
Select Replace(@Val, 'Program Files', 'Program FilesNew') 

這是一個更詳細和有趣的問題,提出問題。如果您事先不知道基本路徑會怎麼樣。

Create function fxUpdateBasePath(@Path as varchar(1000), @NewFolder as varchar(100)) 
returns varchar(1000) as 
Begin 
    Declare @NewPath as varchar(1000) 
    Declare @drive as varchar(10) 
    set @Drive = substring(@Path,charindex(':\',@Path) -1,charindex('\',@Path)) 
    Declare @Root as varchar(100) 
    Set @Path = Substring(@Path, len(@Drive) +1, Len(@Path) - Len(@Drive)) 
    set @Root = Substring(@Path, 1, charindex('\', @Path) -1) 
    set @Path = SubString(@Path, Len(@Root) + 1,Len(@Path) - Len(@Root) +1) 
    Set @NewPath = @Drive + @NewFolder + @Path 
    return @NewPath 
End 

Go 

    Select dbo.fxUpdateBasePath('C:\Program Files\Internet Explorer\en-US', 'Program FilesNew') 
C:\Program FilesNew\Internet Explorer\en-US 
    Select dbo.fxUpdateBasePath('C:\Program Files(x86)\Internet Explorer\en-US', 'Program FilesNew') 
C:\Program FilesNew\Internet Explorer\en-US 
+0

是得到它...感謝您的答案 – Renju 2010-04-09 13:54:59

+0

是我的榮幸,很高興我能有所幫助。 – cmsjr 2010-04-09 14:24:46

0

你總是可以使用REPLACE而不是分裂和重新加入,如果你想要做的是替換 '\ Program Files文件\' 與 '\ profilesNew \'

UPDATE table SET column = REPLACE(column, '\Program Files\', '\profilesNew\');

0

你只是試圖將「Program Files」更改爲「ProfilesNew」?如果是這樣,下面將做到這一點:

DECLARE @val VARCHAR(100); 
SET @val = 'C:\Program Files\Internet Explorer\en-US'; 

SELECT REPLACE(@val, 'C:\Program Files', 'C:\ProfilesNew'); 

爲您提供:C:\ProfilesNew\Internet Explorer\en-US

+0

不,我可以使用替換作爲根文件夾名稱changes.I需要追加「新」到根文件夾。 – Renju 2010-04-09 13:16:29

0
declare @val as varchar(100) 

set @val='C:\Program Files\Internet Explorer\en-US' 

select @val 

select replace(@val,Program Files',Program FilesNew') 
+0

不,我可以使用替換作爲根文件夾名稱changes.I需要追加「新」到根文件夾 – Renju 2010-04-09 13:17:03

1

試試這個:

declare @val as varchar(100) 
declare @firstSlash int 
declare @secondSlash int 

set @val='C:\Program Files\Internet Explorer\en-US' 

set @firstSlash = charindex('\',@val) 
set @secondSlash = @firstSlash + charindex('\', substring(@val,@firstSlash+1,100)) 

select substring(@val, 1, @secondSlash-1) + 'New' + substring(@val, @secondSlash, 100) 
1

嘗試一下本作的一組路徑工作:

declare @val table (val varchar(100)) 
INSERT @val VALUES ('C:\Program Files\Internet Explorer\en-US') 
INSERT @val VALUES ('C:\My Documents\Internet Explorer\en-US') 

SELECT 
    val,LEFT(val,CHARINDEX('\',val,CHARINDEX(':\',val)+3)-1)+'New\'+RIGHT(val,LEN(val)-CHARINDEX('\',val,CHARINDEX(':\',val)+3)) AS New 
    FROM @Val 

輸出:

val          New 
----------------------------------------- -------------------------------------------- 
C:\Program Files\Internet Explorer\en-US C:\Program FilesNew\Internet Explorer\en-US 
C:\My Documents\Internet Explorer\en-US C:\My DocumentsNew\Internet Explorer\en-US 

這對於單一變量:

declare @val as varchar(100) 
set @val='C:\Program Files\Internet Explorer\en-US' 

select @val 
SELECT LEFT(@val,CHARINDEX('\',@val,CHARINDEX(':\',@val)+3)-1)+'New\'+RIGHT(@Val,LEN(@Val)-CHARINDEX('\',@val,CHARINDEX(':\',@val)+3)) 

OUTPUT:

------------------------------------------- 
C:\Program Files\Internet Explorer\en-US 


------------------------------------------- 
C:\Program FilesNew\Internet Explorer\en-US