您的位置:首页 > 数据库

关于截取数据库字符串

2012-08-25 13:57 246 查看
今天在论坛看到一个帖子,觉得很好玩,就去弄了一下。问题是这样的。

有张 Log表



User表



需要实现的效果是



我用的存储过程来实现的

create proc Ganker
as
declare @num int
set @num=0
declare @str1 varchar(50)
declare @str2 varchar(50)
declare @i int
declare @j int
declare @val1 varchar(50)
declare @val2 varchar(50)
declare @name1 varchar(50)
declare @name2 varchar(50)
declare @txt varchar(100)
declare @count int
select @count=COUNT(*) from [log]

begin

while(@count>=@num+1)
begin

select top(1) @str1=Title from [Log] where id not in (select top(@num) id from [Log]) -- 一次读取一条数据

set @i=charindex('{',@str1)--获取第一个前括号
set @j=CHARINDEX('}',@str1)-- 获取第一个后括号
set @val1=substring(@str1,@i+1,@j-@i-1)-- 获取括号里面的 UserID
set @str1=SUBSTRING(@str1,@j+1,len(@str1)-@j+1)-- 获取去除括号后的Title

set @i=CHARINDEX('{',@str1) -- 在去除第一个括号后 再次截取'{' 看是否有值
if(@i=0) --为0说明 没有括号了
begin
select @name1=name from [User] where UserID=@val1	--根据ID 获取 名字
set @txt=@name1+@str1
print @txt
end
else --如果不为0 说明还有括号
begin
set @str2=SUBSTRING(@str1,1,@i-1) --截取 两个括号之间的文字
set @j=CHARINDEX('}',@str1)	 --获取后一个括号的'}'

set @val2=substring(@str1,@i+1,@j-@i-1)	--获取第二个括号内的 UserId
select @name1=name from [User] where UserID=@val1  --获取第一个括号里UserID的名字
select @name2=name from [User] where UserID=@val2  --获取第二个括号里UserID的名字

if(@j<LEN(@str1)) -- 如果后一个括号的长度 < 截取后title的长度 说明'}'后面还有内容
begin
set @str1=SUBSTRING(@str1,@j+1,len(@str1)-@j+1)	--获取第二个括号后面的内容
set @txt=@name1+@str2+@name2+@str1
print @txt
end
else  -- 如果后一个括号的长度 = 截取后title的长度 说明'}'后面没有内容了
begin
set @txt = @name1+@str2+@name2
print @txt
end
end
set @num=@num+1
end

end


贴出来,分享一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: