计算在SqlServer上使用暂停所花费的时间 - C#

时间:2017-08-03 07:16:41

标签: c# sql-server sql-server-2008 sql-server-2012

大家好我有c#这样的问题,然后我写了一个计算员工工作时间的计划,计算总工时(Ore Fine - Ore Inizio - Pausa)以下是计算的查询。我的问题是暂停必须是小时,分钟格式的插入(例如,1.30)如何计算员工使用下面的查询的总时间?我希望我已经解释了

OreInizio是DateTime

OreFine是DateTime

Pausa is Float

2 个答案:

答案 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注入攻击是开放的。始终使用参数。