大家好我有c#这样的问题,然后我写了一个计算员工工作时间的计划,计算总工时(Ore Fine - Ore Inizio - Pausa)以下是计算的查询。我的问题是暂停必须是小时,分钟格式的插入(例如,1.30)如何计算员工使用下面的查询的总时间?我希望我已经解释了
OreInizio是DateTime
OreFine是DateTime
Pausa is Float
答案 0 :(得分:2)
试试这个
select
[IdRisorseUmane],
[IdUtente],
[IdCantiere],
CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, [OreInizio], [OreFine]) - cast([Pausa] * 60 as int), 0), 114) as [TotaleOre]
from [RisorseUmane]
where [IdCantiere] = @id;
答案 1 :(得分:1)
首先获取这两个日期时间列值之间的差异,然后将其减去pausa * 60
(将其缩短为几分钟)。
<强>查询强>
select [IdRisorseUmane], [IdUtente], [IdCantiere],
cast(cast((
datediff(minute, [OreInizio], [OreFine]) - ([Pausa] * 60)) as int) / 60 as varchar) + ':'
+ right('0' + cast(cast((
datediff(minute, [OreInizio], [OreFine]) - ([Pausa] * 60)) as int) % 60 as varchar(2)), 2)
as [TotaleOre]
from [RisorseUmane]
where [IdCantiere] = @id;
不要像使用where IdCantiere='" + IdCantiere + "'
那样在单引号内传递值。
它对SQL注入攻击是开放的。始终使用参数。