重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你好,韩老师有个问题请教。我想通过秒计算加班时间。规则为:加班满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
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。