2017-08-03 35 views
0

嗨,大家好我有這樣的c#問題,然後我寫了一個計算員工工時的計劃,計算總小時數(Ore Fine - Ore Inizio - Pausa)計算的查詢。我的問題是,暫停必須以小時,分鐘格式插入(例如,1.30)如何計算員工使用以下查詢的總時間?我希望我已經解釋計算在SqlServer上暫停工作所花的時間 - C#

OreInizio爲datetime

OreFine爲datetime

保薩是浮法


+0

什麼是數據類型? –

+0

is float @BogdanSahlean – riki

回答

2

嘗試`dbo.RisorseUmane.Pausa`專欄的

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; 
+0

我打印一個負數,不正確 – riki

+0

@RiccardoPirani我用小提琴選擇'CONVERT(varchar(5),DATEADD(minute,DATEDIFF(minute,'2017-07-26 12 :00:00','2017-07-26 18:00:00') - cast(1.5 * 60爲int),0),114)'和結果爲'04:30'您的輸入數據是否正確? – Dmitry

+0

非常感謝您,我也解釋了這一點,事實是我的客戶已經在使用該軟件並輸入了錯誤的值,但是謝謝 – riki

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注入攻擊是開放的。始終使用參數。

+0

如果我按照你告訴我的結果TotaleOre你總是看到錯誤的是-510 – riki

+0

@RiccardoPirani:更新了我的答案。 – Wanderer

+0

這是不正確的看圖片什麼是我,我從負面時間 – riki