计算银行利息。有一储户账号为0001,银行存取记录如下:
交易日期 交易金额 账户余额 备注
2010-10-01 10000 10000 开户存入
2010-12-20 20000 30000
2011-02-03 -5000 25000
2011-05-01 -3000 22000
2011-10-10 6000 28000
存取记录数据表名为fundlist,字段名为id(编号,int),cid(储户账号,varchar(20)),ex-date(交易日期,datetime),ex-money(交易金额,money),balance(账户余额,money)。根据有关规定,银行存款利息为:2011-04-01号之前(包括)为年利息2%,之后(不包括)为年利息3%,请用编写一个存储过程sp_cal_interest用来计算该储户的当前利息,要求利用游标实现。说明:当前用getdate()表示,年利息2%用存入的天数*2%/365表示利息。
create proc sp_cal_interest
as
declare @ex_date date
declare @balance money
declare @pre_date date
declare @pre_balance money
declare @result money
declare Calcursor cursor for
select ex_date,balance 
from fundlist
open Calcursor
fetch next from Calcursor into @ex_date,@balance
set @pre_date=@ex_date
set @pre_balance=@balance
set @result=0
while  @@FETCH_STATUS=0
begin
while @ex_date<=CAST('2011-04-01' as date)
begin
fetch next from Calcursor into @ex_date,@balance
if @ex_date<=CAST('2011-04-01' as date)
begin
set @result=@result+@pre_balance*(datediff(day, @pre_date,@ex_date))*2/36500
set @pre_balance=@balance
set @pre_date=@ex_date
end
else 
begin    
set @result=@result+@pre_balance*(datediff(day, @pre_date,CAST('2011-04-01' as date)))*2/36500
set @result=@result+@pre_balance*(datediff(day,CAST('2011-04-01'as date),@ex_date))*3/36500
set @pre_balance=@balance
set @pre_date=@ex_date
end
end
while @ex_date>CAST('2011-04-01' as date)
fetch next from Calcursor into @ex_date,@balance
begin
set @result=@result+@pre_balance*(datediff(day, @pre_date,@ex_date))*3/36500
set @pre_balance=@balance
set @pre_date=@ex_date
end
end
print '利息:'+@result
close Calcursor  
deallocate Calcursor