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

时间:2021-05-13 14:18:15

标签: 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

如果选择的开始时间是 1:40:00,结束时间是 3:20:00(注意机器没有在 2:30:00 到 3:00 运行) >

如何在 SQL 中获取持续时间?

对于上面的例子,答案应该是 70 分钟。

1:40:00 to 2:30:00 - 50Mins
3:00:00 to 3:20:00 - 20Mins
Total = 70mins  between 1:40:00 and 3:20:00

2 个答案:

答案 0 :(得分:1)

这里是你怎么做的,我在 sql server 中写的(假设你在微软生态系统中)但你可以在任何其他 dbms 中做同样的事情)

select sum(datediff(minute, case when startdate <@startdate then @startdate else startdate end,case when enddate < @enddate then enddate else @enddate end))
from cte
where @startdate <= enddate and @enddate >= startdate

db<>fiddle here

在 postgresql 中你可以这样做:

select extract( epoch from sum(case when enddate < enddatevar then enddate else enddatevar end - case when startdate <startdatevar then startdatevar else startdate end)) /60 
from cte
where startdatevar <= enddate and enddatevar >= startdate

答案 1 :(得分:0)

在 SQL 中你可以:

 SELECT SUM(DATEDIFF(MINUTE, EndTime,StartTime)) FROM table_name

或者,在 C# 中,假设您获得具有 StartTimeEndTime 属性的对象集合:

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