zjp0633 发表于 2018-10-19 13:13:20

创建SQL函数计算员工加班时间

  你好,韩老师有个问题请教。我想通过秒计算加班时间。规则为:加班满4小时才算加班,加班时间满8小时为加班一天,加班时间不足4小时不算加班,加班时间大于4小时小于8小时为0.5个加班。我写了一个自定义函数计算但是计算出来的结果不对。麻烦韩老师指教
  CREATE FUNCTION worktime
  (@startTime int)
  RETURNS nvarchar(100)
  AS
  BEGIN
  declare @rst nvarchar(500)
  declare @day int
  declare @hours int
  declare @aa decimal
  set @rst=''
  set @day=@startTime/28800         --8小时算一天工作量 8小时28800秒
  set @hours=@startTime% 28800/3600--计算不够8小时,多出来的时间是多少小时
  Set @aa=0.5                                          --常数没必要创建变量
  if(@day>0)                                              --没必要进行判断
  set @rst=@day
  if(@hours=4)                                       --只需判断是否大于等于4小时
  set @rst=@rst+@aa                     --@rst是字符类型的不能和@aa加法运算
  RETURN @rst
  

以上函数创建之后执行结果达不到预期  
select dbo.worktime(28800+14300)
  
结果是1
  select dbo.worktime(28800+14500)
  
结果是2
  

  我将函数进行了更改和精简
  CREATE FUNCTION worktime
  (@startTime int)
  RETURNS nvarchar(100)
  AS
  BEGIN
  declare @rst nvarchar(500)
  declare @day int
  declare @hours int
  set @rst=''                                    --可以进行初始化赋值
  set @day=@startTime/28800      --计算加班天数,由于@day是int类型计算结果会自动取整数部分
  set @hours=@startTime% 28800/3600 --计算预先的
  if(@hours>=4)                        --如果加班时间超过4小时按半天计算
  set @rst=@day+0.5
  else set @rst=@day             --否则不计入加班时间
  RETURN @rst
  end
  end


页: [1]
查看完整版本: 创建SQL函数计算员工加班时间