2016-04-14 20 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で同じクエリをどのように書くことができますか?より多くのLINQで今

+0

サイドノート:あなたは 1月の最後の日以内にを発生したイベントを含める場合、質問の下に述べたようにまた

、あなたのWHERE句を変更することは何かを無視するあなたの意図です1月の最終日に起こったことは?そうでない場合、 '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 

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

ありがとうman .. :) – akash

+0

私のこのクエリはどのようにlinqクエリに変換することができます知っているか? – akash

+0

SELECT SUM(DATEDIFF(分、インタイム、OUTTimeは))/ 60 出席'01 -04-2016' BETWEENインタイムAND '01 -31-2016' 、従業員= 63 – akash

0

SQL Serverは、時間スパンを表しDATETYPEを持っていません。プレゼンテーション層に

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

そして(日)にその変換し、時間と分:このように、それはあなたが必要とする結果の細かさを表すint S(ここでは、分)にすべてを変換することが最善です。

SELECT SUM(DATEDIFF(minute,InTime,OutTime)) as TotalMinutes 
FROM Attendance 
WHERE InTime >= '20160101' AND InTime < '20160201' 
AND Employee=63 
関連する問題