2016-04-14 110 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 

我已经得到了这个结果。如何在sql中获取小时数和分钟数

[table screenshot[1]

我要的是所有的时间的总和。我怎样才能在Linq中编写相同的查询?

+0

附注:这是你有意忽略了什么在一月的最后一天期间发生的*如果不是,那么'WHERE InTime> ='20160101'和InTime <'20160201''会好得多。 –

回答

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 
更多的LINQ

现在:

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

感谢的人.. :) – akash

+0

我可以知道我的这个查询如何转换为linq查询? – akash

+0

SELECT SUM(DATEDIFF(MINUTE,InTime,OutTime))/ 60 FROM考勤 '01-04-2016'和'01 -31-2016' 和员工= 63 – akash

0

SQL Server不具有代表时间跨度一个 datetype。因此,它通常是最好的一切转化为int s表示代表你需要的结果的粒度(这里,分):

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

而再转化(天),小时和分钟在表示层。

而且,指出的问题如下,如果你想包括在1月的最后一天发生事件,改变你的WHERE条款:

SELECT SUM(DATEDIFF(minute,InTime,OutTime)) as TotalMinutes 
FROM Attendance 
WHERE InTime >= '20160101' AND InTime < '20160201' 
AND Employee=63 
相关问题