分隔字符串与分隔符在sql服务器
我有一个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
为什么不使用,而不是更换?
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
你总是可以使用REPLACE而不是分裂和重新加入,如果你想要做的是替换 '\ Program Files文件\' 与 '\ profilesNew \'
UPDATE table SET column = REPLACE(column, '\Program Files\', '\profilesNew\');
你只是试图将“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
不,我可以使用替换作为根文件夹名称changes.I需要追加“新”到根文件夹。 – Renju 2010-04-09 13:16:29
declare @val as varchar(100)
set @val='C:\Program Files\Internet Explorer\en-US'
select @val
select replace(@val,Program Files',Program FilesNew')
不,我可以使用替换作为根文件夹名称changes.I需要追加“新”到根文件夹 – Renju 2010-04-09 13:17:03
试试这个:
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)
尝试一下本作的一组路径工作:
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
是得到它...感谢您的答案 – Renju 2010-04-09 13:54:59
是我的荣幸,很高兴我能有所帮助。 – cmsjr 2010-04-09 14:24:46