C# SQL:从表条目中获取开始日期时间和结束日期时间之间的持续时间

C# SQL:从表条目中获取开始日期时间和结束日期时间之间的持续时间,c#,sql,postgresql,datetime,C#,Sql,Postgresql,Datetime,我有一个SQL表,其中包含机器开始和结束时间(DateTime)的条目以及机器运行的持续时间。给定开始日期时间和结束日期时间,我想计算机器运行的持续时间。DB是SQL,代码是C# 注意:当机器没有在给定的开始和结束日期时间之间运行时,可能会有一些持续时间,我希望在总计算期间忽略该持续时间 举个例子 启动时间机器 结束时间机器 持续时间(分钟) 1:00:01 2:00:00 - 60 2:00:01 2:30:00 - 30 3:00:01 4:00:00 - 60 我在sql server中写

我有一个SQL表,其中包含机器开始和结束时间(DateTime)的条目以及机器运行的持续时间。给定开始日期时间和结束日期时间,我想计算机器运行的持续时间。DB是SQL,代码是C#

注意:当机器没有在给定的开始和结束日期时间之间运行时,可能会有一些持续时间,我希望在总计算期间忽略该持续时间

举个例子

启动时间机器 结束时间机器 持续时间(分钟) 1:00:01 2:00:00 - 60 2:00:01 2:30:00 - 30 3:00:01 4:00:00 - 60
我在sql server中写道(假设您在microsoft eco system中),但您可以在任何其他dbms中执行相同的操作

在SQL中选择sum(datediff(minute,case-when-startdate,您可以执行以下操作:

 SELECT SUM(DATEDIFF(MINUTE, EndTime,StartTime)) FROM table_name
或者,在C#中,假设您得到一组具有
StartTime
EndTime
属性的对象:

var duration = results.Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes);

我删除了不一致的数据库标记。请仅使用您真正使用的数据库进行标记。最好使用c#。SQL查询会变得复杂。@jdweng这是SQL中的一个简单查询,请参见我的答案;)DATEDIFF在PostgreSQL中不可用,如何在PostgreSQL中执行相同的操作?@LetsCode查看更新的答案,应该可以(如果我没有犯任何错误)考虑一下,另外一个带有开始时间和结束时间的条目为空(机器仍在运行)在上面的场景中,这个条目是不被考虑的,是否有可能把这个条目作为结束时间来考虑?如果是,怎么做?@在SMAE查询中的LeScript代码,不管结束日期是空,用当前日期替换它:<代码> CueSeCE(EndoTeT,现在())< /代码>。
 SELECT SUM(DATEDIFF(MINUTE, EndTime,StartTime)) FROM table_name
var duration = results.Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes);