将时间存储为小数,您将陷入痛苦的世界。在我看来,你的时间是以十进制形式存储的,因此 1 小时 30 分钟是 1.3,对吗?
由于 0.90 表示 90 分钟,您预计 33.90 将变为 34.30,但是,您是否考虑过存储格式的巨大故障超出了这个小问题?考虑这种情况:
create table ConsultantTimeSheet (WorkingHours decimal(5,2));
insert ConsultantTimeSheet select 1.3;
insert ConsultantTimeSheet select 1.3;
insert ConsultantTimeSheet select 1.3;
insert ConsultantTimeSheet select 1.5;
Declare @sum varchar(50);
Set @sum = (select SUM(ct.WorkingHours) from ConsultantTimeSheet ct);
select @sum;
--- output
5.40
因为 .40 不高于 60,所以没有转换。但是,真的应该是6小时20分钟!!
无论如何,要使用你所拥有的,你需要这个。请尽早修复您的数据库结构。
Declare @sum varchar(50);
Set @sum = (select 1.0*floor(RawDecimal)+(RawDecimal-1.0*floor(RawDecimal))*60/100
from (
select RawDecimal=sum(1.0*floor(WorkingHours)) + sum(WorkingHours-floor(WorkingHours))/60*100
from ConsultantTimeSheet ct
where ConsultantID = @Consultantid
and ct.Status = @status
and ct.StartDate = @StartDate
and ct.EndDate = @Enddate ) x);
select @sum;
--- output
6.2