存储过程中的考勤加班问题(79分)

  • 主题发起人 主题发起人 网中戏
  • 开始时间 开始时间

网中戏

Unregistered / Unconfirmed
GUEST, unregistred user!
在存储过程处理员工的加班时数
得到下面各个员工的加班时间
4.15 小时 、 4.32 小时、4.52 小时 、4.88 小时 ......
5.24 小时 、 5.62 小时 ....等等
现在要把小数点后面不到5的统统计为 0 。超过 5的统统计为 5 如下
4.0 小时 、 4.0 小时、4.5 小时 、4.5 小时 ......
5.0 小时 、 5.5 小时 ....只能是整时或半时。
在程序中可以写个函数实现 。在存储过程中怎么实现?
 
在数据库中自定义一个函数,你每个人是不是就一个时间
用charindex判断小数点的位置,然后用substring取出后两位的字符串,
用case判断,最后REPLACE替换响应位置的字符串,
上面都是针对你写的字符串格式处理的,
如果只是'4.15'这样的numeric形式,那就比较简单了,自定义函数也可以的.
不是'4.15 小时 、 4.32 小时、4.52 小时 、4.88 小时'放在一条记录里面吧?
 
在存储中
DECLARE @JOB NUMERIC(8,2)
SELECT @JOB=JOB FROM TABLE WHERE USERID = .. --查询
得到
@JOB = 4.29 或 4.68
现在 怎么样使 4.29 变成 @JOB = 4.0
怎么样使 4.68 变成 @JOB = 4.5
不准备取回在程序中运算。想直接在存储过程中 运算出结果?谁帮我分数另给。
 
SELECT @JOB=
case
when (job-floor(job))<=0.5 then floor(job)
when (job-floor(job))>=0.5 then floor(job)+0.5
end
FROM TABLE WHERE USERID = .. --查询
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部