日期:2014-05-19  浏览次数:20569 次

用sql截取字符串中指定的字符
例如:有一个字符串“休闲\体育\球类\排球\男子排球\白英”

现在需要把第三项,第四项和第五项截取出来,如何用一个select语句写出?

输出结果:
第三项     |     第四项     |     第五项
球类                 排球           男子排球

------解决方案--------------------
drop function udf_splitstring
go
CREATE function udf_splitstring
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(id int identity(1,1),istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab(istr)
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab(istr) values(@str)
return
end

declare @str varchar(1000)
set @str= '休闲\体育\球类\排球\男子排球\白英 '
select 第一项=(select istr from udf_splitstring(@str, '\ ') where id=3),
第二项=(select istr from udf_splitstring(@str, '\ ') where id=4),
第三项=(select istr from udf_splitstring(@str, '\ ') where id=5)
/*
第一项 第二项 第三项
----------------------------
球类 排球 男子排球
*/
------解决方案--------------------
declare @s varchar(1000),@str varchar(1000),@i int
select @s = '休闲\体育\球类\排球\男子排球\白英 ', @str = ' ', @i = 1

while @s <> ' ' begin
if (@i > 2 and @i < 6)
select @str = @str + substring(@s,1,charindex( '\ ',@s))
select @s = substring(@s,charindex( '\ ',@s) + 1,len(@s) - 1)
select @i = @i + 1
end
select @str = left(@str,len(@str) - 1)

select [第一项] = substring(@str,1,charindex( '\ ',@str) - 1),
[第二项] = substring(@str,charindex( '\ ',@str) + 1,charindex( '\ ',@str,charindex( '\ ',@str)) - 1),
[第三项] = substring(reverse(@str),1,charindex( '\ ',reverse(@str)) - 1)

------解决方案--------------------
declare @s varchar(1000),@str varchar(1000),@i int
select @s = '休闲\体育\球类\排球\男子排球\白英 ', @str = ' ', @i = 1

declare @s1 varchar(10),@s2 varchar(10),@s3 varchar(10),@s4 varchar(10),@s5 varchar(10)
declare @strtmp varchar(50)
declare @j int

set @strtmp=@s
select @j=charindex( '\ ',@s)
print @j

--取第一列
set @s1=left(@strtmp,@j-1)
select @s1
--改字符串
set @strtmp=substring(@strtmp,@j+1,50)
select @strtmp

--取第二列
set @s2=left(@strtmp,@j-1)
select @s2
--改字符串
set @strtmp=substring(@strtmp,@j+1,50)
select @strtmp
------解决方案--------------------
CREATE function udf_splitstring
(
@str varchar(8000)--要分拆的字符串
,@spli varchar(10)--字符串分隔符
)
returns @retab table(id int identity(1,1),istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab(istr)
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab(istr) values(@str)
return
end

declare @str varchar(1000)
set @str= '休闲\体育\球类\排球\男子排球\白英 '
select 第一项=(select istr from udf_splitstring(@str, '\ ') where id=3),