2016-04-14 12 views
0
SELECT LEFT(CONVERT(VARCHAR(10), OutTime - InTime, 108), 5) 
FROM Attendance 
WHERE InTime BETWEEN '01-01-2016' AND '01-31-2016' 
AND Employee=63 
ORDER BY InTime 

Bu sonucu elde ettim.sql saat ve dakika toplamı nasıl elde edilir

[table screenshot[1]

İstediğim her saat toplamıdır. Ve aynı sorguyu Linq'de nasıl yazabilirim? daha LINQ ile Şimdi

+0

Yan notu: Eğer Ocak ayının son günü içinde oluştu olayları dahil etmek istiyorsanız, söz Aşağıda belirtildiği gibi

, senin WHERE maddesinin değiştirilmesine bir şey yok saymak için Niyetiniz Bu, Ocak ayı son günlerinde * oldu mu? Değilse, WHERE InTime> = '20160101' VE InTime <'20160201' 'olması çok daha iyi olurdu. –

cevap

2
CREATE TABLE #Attendance(OutTime DateTime, InTime DateTime) 

-- Sample Data 
insert into #Attendance(InTime, outTime) 
values ('2015-12-12 07:30', '2015-12-12 17:30'), 
('2015-12-12 07:30', '2015-12-12 17:30'), 
('2015-12-13 07:30', '2015-12-13 16:45'), 
('2015-12-14 07:30', '2015-12-14 14:34'), 
('2015-12-15 07:30', '2015-12-15 18:21') 

-- Use DateDiff function to get total minutes between times to achieve greater accuracy then with 'hour' 
-- Convert total minutes to hours after adding up total minutes 
SELECT SUM(DATEDIFF(MINUTE, InTime , OutTime)) /60 
FROM #Attendance 

DROP TABLE #Attendance 

:

public class Attendance 
{ 
    public DateTime InTime { get; set; } 
    public DateTime OutTime { get; set; } 
} 

[TestClass] 
public class AttendanceUser 
{ 
    [TestMethod] 
    public void UseALambda() 
    { 
     var rand = new Random(); 
     var attendances = Enumerable.Range(0, 10).Select(x => 
      new Attendance { InTime = DateTime.Now.AddHours(-rand.Next(x)), OutTime = DateTime.Now.AddHours(rand.Next(x)) }).ToList(); 

     var total = attendances.Sum(x => (x.OutTime - x.InTime).TotalMinutes)/60; 
    } 
} 
+0

Teşekkürler .. :) – akash

+0

Bu sorgunun linq sorgusuna nasıl dönüştürüleceğini biliyorum. – akash

+0

Where InTime ARASINDA '01 -04-2016' Katılım DAN TOPLAM (DATEDIFF (DAKİKA, InTime, OutTime))/60 ve '01 -31-2016' ve Personel = 63 – akash

0

SQL Server bir zaman yayılma temsil eden bir tarih gösterim türünü yok. sunumunuz tabakasında

SELECT SUM(DATEDIFF(minute,InTime,OutTime)) as TotalMinutes 
FROM Attendance 
WHERE InTime BETWEEN '20160101' AND '20160131' 
AND Employee=63 
--ORDER BY InTime 

Ve sonra (gün) içine dönüştürmek, saat ve dakika: Bunun gibi, ihtiyacınız sonucun ayrıntı düzeyini temsil int s (burada, dakika) içine her şeyi dönüştürmek için genellikle en iyi .

SELECT SUM(DATEDIFF(minute,InTime,OutTime)) as TotalMinutes 
FROM Attendance 
WHERE InTime >= '20160101' AND InTime < '20160201' 
AND Employee=63 
İlgili konular