求SQL Server 2000函数: 计算利息

thinclient 2008-07-08 01:02:19
问题概述:
1. 求tsql存储过程,输入参数@khh(客户号),@jkh(借款号),@jxrq(计息日期), 输出参数@lx(利息)
2. 要能求出任一“给定客户号,给定借款号,给定日期”的利息
说明,下面附图中上面表中有个“到期日期”,还有“利率”和“过期利率”,显见,当@jxrq(计息日期)大于“到期日期”时用“过期利率”而不是“利率”来计算利息。
详见下图

下面举例说明一个利息计算的过程:(为了看着清楚,我加了换行)
例1:
设@jxrq(计息日期)=2008.07.05,则
@lx(利息)=
(2008.07.04-2008.07.02)*0.001(利率)*100(上期余额)+
(2008.07.05-2008.07.04)*0.001(利率)*90(上期余额)

例2:
设@jxrq(计息日期)=2008.07.13,则
@lx=
(2008.07.04-2008.07.02)*0.001*100+
(2008.07.06-2008.07.04)*0.001*90+
(2008.07.10-2008.07.6)*0.001*70+
(2008.07.12-2008.07.10)*0.001*40+
(2008.07.13-2008.07.12)*0.002*40

请注意红色的两行,由于2008.07.12是到期时间,所以2008.07.10--2008.07.13这段时间被以不同利息计算利息,所以得是两行。

例3:
设@jxrq(计息日期)=2008.07.15,则
@lx=
(2008.07.04-2008.07.02)*0.001*100+
(2008.07.06-2008.07.04)*0.001*90+
(2008.07.10-2008.07.6)*0.001*70+
(2008.07.12-2008.07.10)*0.001*40+
(2008.07.15-2008.07.12)*0.002*40

这个例子唯一的不同就是计息时间(2008.07.15)大于最后一次还款的时间(2008.07.14)。
请大侠们指教!

下附建表代码:
create table jk (khh int,jkh int,jksj datetime,dqsj datetime,ll float,gqll float,jkje money)
insert jk (khh,jkh,jksj,dqsj,ll,gqll,jkje) select 1,1,'2008.7.2','2008.7.12',0.001,0.002,100

create table hk (khh int,jkh int,sqsj datetime,sqye money,hksj datetime)
insert hk (khh,jkh,sqsj,sqye,hksj) select 1,1,'2008.7.2',100,'2008.7.4'
union
select 1,1,'2008.7.4',90,'2008.7.6'
union
select 1,1,'2008.7.6',70,'2008.7.10'
union
select 1,1,'2008.7.10',40,'2008.7.14'
各位可以参数下面的帖子,该帖也是我发的但是没得到最终的正确答案。
http://topic.csdn.net/u/20080705/18/e4471fb8-84dd-4a8a-a4bd-33f9504039bf.html#replyachor
...全文
606 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgzaaa 2008-07-11
  • 打赏
  • 举报
回复
3. “到期时间”还可能在“上期时间”和jxsj(计息时间)中间。用两种利率。
jxsj根本看不到--上面这句话什么意思?
thinclient 2008-07-11
  • 打赏
  • 举报
回复
ding
wgzaaa 2008-07-11
  • 打赏
  • 举报
回复
--补上第1条件:
alter proc pro_lx @khh int,@jkh int,@jxrq datetime,@lx float output as
set @lx=0
IF EXISTS(SELECT 0 FROM HK WHERE KHH=@KHH AND JKH=@JKH)
BEGIN
select @lx=sum(datediff(d,hk.sqsj,case when hk.hksj>jk.dqsj and jk.dqsj <=@jxrq then jk.dqsj when hk.hksj>@jxrq then @jxrq else hk.hksj end)*jk.ll*hk.sqye+
(case when hk.hksj>jk.dqsj and @jxrq>jk.dqsj then datediff(d,jk.dqsj,@jxrq)*jk.gqll*hk.sqye else 0 end))
from hk left join jk on jk.khh=hk.khh and jk.jkh=hk.khh
where hk.khh=@khh and hk.jkh=@jkh and hk.sqsj <@jxrq group by hk.khh,hk.jkh
END
ELSE
BEGIN
select @lx=case when @jxrq<=jksj then 0 else ( datediff(d,jksj,@jxrq)*ll+(case when @jxrq>dqsj then datediff(d,dqsj,@jxrq) else 0 end)*(gqll-ll) )*jkje end
from jk where khh=@khh and jkh=@jkh
END
thinclient 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hery2002 的回复:]
引用 8 楼 thinclient 的回复:
计息时间日子越多越长,这不是很正常么?
你借钱是一笔
但是你还时可以一次还一部分,只要你还没还干净,自然是时间越过,利息越大啊,不好理解么?

关键是14号已经还清了....
按照计算公式,
(2008.07.15-2008.07.12)*0.002*40
那么就应该是
(2008.07.20-2008.07.12)*0.002*40
其实15号以后就不应该算利息了啊,
因为都还完了..
[/Quote]
怪我没说清:
不是还不还利息的问题,是求出从开始借款到15号累计是多少利息(与还不还息都无关),这和还不还利息,还了多少利息没关系。就是想求出任一时间点上的利息数。
再则,14日还清了只是一个特殊情况,就是欠金额是0,实际中很可以最后的一笔没还清。
想求的就是这样一个通用的模型。
我今天用vfp程序做了下,发现这个问题比原先想的还复杂:
1. 还款记录表中有可能一行对应记录也没有,照样应按日计息,且过了“到期时间”计算公式中的利率得变。
2. “到期时间”可能在某一对“上期时间”和“还款时间”中间。用两种利率。
3. “到期时间”还可能在“上期时间”和jxsj(计息时间)中间。用两种利率。
对于情况2,3都要分两段才能正确算出利息。
等待更多答复……


xiaoku 2008-07-09
  • 打赏
  • 举报
回复
呵呵...侃侃...
wgzaaa 2008-07-09
  • 打赏
  • 举报
回复
是一样的贴吗?那边已经更新过
hery2002 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 thinclient 的回复:]
计息时间日子越多越长,这不是很正常么?
你借钱是一笔
但是你还时可以一次还一部分,只要你还没还干净,自然是时间越过,利息越大啊,不好理解么?
[/Quote]
关键是14号已经还清了....
按照计算公式,
(2008.07.15-2008.07.12)*0.002*40
那么就应该是
(2008.07.20-2008.07.12)*0.002*40
其实15号以后就不应该算利息了啊,
因为都还完了..
amdwinter 2008-07-08
  • 打赏
  • 举报
回复
纯粹接分
thinclient 2008-07-08
  • 打赏
  • 举报
回复
计息时间日子越多越长,这不是很正常么?
你借钱是一笔
但是你还时可以一次还一部分,只要你还没还干净,自然是时间越过,利息越大啊,不好理解么?
thinclient 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hery2002 的回复:]
例3:
设@jxrq(计息日期)=2008.07.15,则
@lx=
(2008.07.04-2008.07.02)*0.001*100+
(2008.07.06-2008.07.04)*0.001*90+
(2008.07.10-2008.07.6)*0.001*70+
(2008.07.12-2008.07.10)*0.001*40+
(2008.07.15-2008.07.12)*0.002*40
这个例子唯一的不同就是计息时间(2008.07.15)大于最后一次还款的时间(2008.07.14)。
请大侠们指教!
15号就计算进来了,那么利息好像还是涨了的.
如果你的计息日期在往后推一点,…
[/Quote]
当然,你理解的没错
你越是拖着不还,利息越多
hery2002 2008-07-08
  • 打赏
  • 举报
回复
例3:
设@jxrq(计息日期)=2008.07.15,则
@lx=
(2008.07.04-2008.07.02)*0.001*100+
(2008.07.06-2008.07.04)*0.001*90+
(2008.07.10-2008.07.6)*0.001*70+
(2008.07.12-2008.07.10)*0.001*40+
(2008.07.15-2008.07.12)*0.002*40
这个例子唯一的不同就是计息时间(2008.07.15)大于最后一次还款的时间(2008.07.14)。
请大侠们指教!
15号就计算进来了,那么利息好像还是涨了的.
如果你的计息日期在往后推一点,如果为2008.07.20号,那么按照你这种算法,计息时间还会更长.
utpcb 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hery2002 的回复:]
引用 1 楼 happyflystone 的回复:
计息日期怎么会大于还款日期

银行黑幕~
呵呵,
我之前也是奇怪啦...
[/Quote]
哈哈搂住看来烦恼很久了
thinclient 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
计息日期怎么会大于还款日期
[/Quote]
你借了人家钱,不还也逐日长息啊
不过,你中间要是还了一部分,还后的每日利息会低啊,你要是全还完了,利息也就不长了啊
thinclient 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
计息日期怎么会大于还款日期
[/Quote]
你借了人家钱,不还也逐日长息啊
不过,你中间要是还了一部分,还后的每日利息会低啊,你要是全还完了,利息也就不长了啊
hery2002 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
计息日期怎么会大于还款日期
[/Quote]
银行黑幕~
呵呵,
我之前也是奇怪啦...
-狙击手- 2008-07-08
  • 打赏
  • 举报
回复
计息日期怎么会大于还款日期

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧