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 enddeclare @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 = 1declare @s1 varchar(10),@s2 varchar(10),@s3 varchar(10),@s4 varchar(10),@s5 varchar(10) declare @strtmp varchar(50) declare @j intset @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 enddeclare @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) /* 第一项第二项第三项 ---------------------------- 球类排球男子排球 */
谢谢大家,gahade(与君共勉)的通用性比较强。
select a=substring(charindex(字段1,'球类'),2),b= substring(charindex(字段1,'排球'),2),c= substring(charindex(字段1,' 男子排球'),4) from 表
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
enddeclare @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)
/*
第一项 第二项 第三项
----------------------------
球类 排球 男子排球
*/
select @s = '休闲\体育\球类\排球\男子排球\白英', @str = '', @i = 1while @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)
select @s = '休闲\体育\球类\排球\男子排球\白英', @str = '', @i = 1declare @s1 varchar(10),@s2 varchar(10),@s3 varchar(10),@s4 varchar(10),@s5 varchar(10)
declare @strtmp varchar(50)
declare @j intset @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
(
@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
enddeclare @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)
/*
第一项第二项第三项
----------------------------
球类排球男子排球
*/