您的位置:首页 > 数据库

MS SQL SERVER中的字符串分割

2005-10-25 16:32 405 查看
--字符串分割
Declare @TUserID Table(UserID varchar(50))
Declare @chvTestString varchar(1024)
Declare @i int,@i_t int
Declare @chvString varchar(50)
Set @chvString=''
Set @chvTestString='1,23,456,6789,43,21'
Set @i=1
Set @i_t=1
While @i<=len(@chvTestString)
begin
if SubString(@chvTestString,@i,1)=','
begin
Set @chvString=SubString(@chvTestString,@i_t,@i-@i_t)
Insert into @TUserID values(@chvString)
Set @i_t=@i+1
end

Set @i=@i+1
end
Insert into @TUserID values(SubString(@chvTestString,@i_t,@i-@i_t))
Select * from @TUserID
--下面对字符串分割做了改进,由于要工作需要的中文或者数字类型,并且可以随意修改分隔符号
--批量查询用户的银子数量(含保险柜和现金)可以使用由','分割开的用户ID或者用户名查询
--字符串分割
/*
Designed By whbo
Designed At 2005-10-25 16:00:00
*/
Use Money
Declare @chvTestString varchar(1024)
Declare @i int,@i_t int
Declare @Flag tinyint
Declare @chvString varchar(50)
Declare @chvReplaceTag varchar(5)
Set @chvString=''
Set @Flag=2 --Flag确定使用ID还是用户名,1:使用用户名;2:使用ID <1>
Declare @TUserID Table(LoginName varchar(50),UserID int)
Set @chvTestString='9547830,10348133' --这里用','分开各用户的ID,或者用户名 <2>
Set @i=1
Set @i_t=1
Set @chvReplaceTag=',' --如果字符串中用的其他分隔符号,比如用';'分隔,令 Set @chvReplaceTag=';'
Set @chvTestString=Replace(@chvTestString,@chvReplaceTag,',')
While @i<=len(@chvTestString)
begin
if SubString(@chvTestString,@i,1)=','
begin
Set @chvString=SubString(@chvTestString,@i_t,@i-@i_t)
if @Flag=1
Insert into @TUserID values(@chvString,0)
if @Flag=2
Insert into @TUserID values('',Convert(int,@chvString))
Set @i_t=@i+1
end

Set @i=@i+1
end
if @Flag=1
Insert into @TUserID values(SubString(@chvTestString,@i_t,@i-@i_t),0)
if @Flag=2
Insert into @TUserID values('',Convert(int,SubString(@chvTestString,@i_t,@i-@i_t)))
--Select * from @TUserID
--更新用户的ID信息
--这里使用了跨表更新
if @Flag=1
Update @TUserID Set UserID=b.UserID from @TUserID a,UserCenter.dbo.AllUser b Where a.LoginName=b.LoginName
if @Flag=2
Update @TUserID Set LoginName=b.LoginName from @TUserID a,UserCenter.dbo.AllUser b Where a.UserID=b.UserID
Select * from @TUserID
--下面查询用户的银子信息
Select a.UserID,c.LoginName,a.Amount,b.Money From Money a,Bank b,@TUserID c where a.UserID=c.UserID and a.UserID=b.UserID
Group by a.UserID,c.LoginName,a.Amount,b.Money
--下面可以更新这批用户的信息
Declare @intWantedAmount int
Set @intWantedAmount=0 --这里设置要给用户增加的现金数量
Update Money Set Amount=Amount+@intWantedAmount From Money a,@TUserID b where a.UserID=b.UserID
--下面可以删除这批用户的保险柜 不要轻易使用!
--
Go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: