你好,韩老师有个问题请教。我想通过秒计算加班时间。规则为:加班满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) --这个也多余 set @rst=@rst 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