我有一个包含两个日期列的表格,其中 ArrivalDate 和 DepartureDate 。 我需要计算表格中所有条目的总时间段,以小时和分钟为单位(不是日期)。我可以通过datediff获得特定记录的时间段,但我需要的是表格中所有日期差异的总和,以小时和分钟为单位。
我正在做的是获取日期差异
set @StartDate = '10/01/2012 08:40:18.000'
set @EndDate = '10/04/2012 09:52:48.000'
SELECT CONVERT(CHAR(8), CAST(CONVERT(varchar(23),@EndDate,121) AS DATETIME)
-CAST(CONVERT(varchar(23),@StartDate,121)AS DATETIME),8) AS TimeDiff
这只会给出特定的日期差异。我需要表格中的所有日期差异然后总结。
答案 0 :(得分:0)
此查询将生成您要查找的结果:
SELECT SUM(DATEDIFF(minute, R.ArrivalDate, R.DepartureDate)) / 60 as TotalHours
, SUM(DATEDIFF(minute, R.ArrivalDate, R.DepartureDate)) % 60 as TotalMinutes
FROM TableWithDates R
返回的第一列将总分钟数除以60,即可得到整个小时数。返回的第二列在将总分钟数除以60时计算余数,以便为您提供剩余的额外分钟数。将2列合并为您提供所有到达和离开日期之间经过的小时数和分钟数的总和。
答案 1 :(得分:0)
试试这个:
SELECT
SUM(DATEDIFF(HOUR, t.EndDate, t.StartDate)) AS Hours,
(
SUM(DATEDIFF(MINUTE, t.EndDate, t.StartDate)) -
SUM(DATEDIFF(HOUR, t.EndDate, t.StartDate)) * 60
) AS Minutes
FROM
YOUR_TABLE t
IT应该这样做。
答案 2 :(得分:0)
你可以尝试这样的事情......
SELECT CAST( (SUM(DATEDIFF(mi , ARRIVALDATE , DEPARTUREDATE)))/60 AS VARCHAR(10))
+ ':'+
CAST( (SUM(DATEDIFF(mi , ARRIVALDATE , DEPARTUREDATE)))%60 AS VARCHAR(10))
FROM YOURTABLE
这只是一个伪代码..根据需要替换表名和列名。
答案 3 :(得分:0)
如果你有很长的时间段int将在SUM中失败。所以这会奏效,
SELECT TIME / 60 AS HOURS
,TIME % 60 AS MINUTES
FROM (
SELECT SUM(CAST(DATEDIFF(MINUTE, ArrivalDate, DepartureDate) AS BIGINT)) AS Time
FROM Table
) A
答案 4 :(得分:0)
试试这个
Declare @totalSeconds as numeric
SELECT @totalSeconds = sum(Datediff(ss, ArrivalDate , DepartureDate)) from tableName
SELECT @totalSeconds //displays total seconds
select CAST(@totalSeconds /3600 AS int), (CAST(@totalSeconds /60 AS int) - (CAST(@totalSeconds /3600 AS int)*60)) //converting seconds to hours & minutes
答案 5 :(得分:0)
我试过了
DECLARE @TotalWaitingMinutesOverall INT =(SELECT SUM(DATEPART(MI,(ISNULL(DepartureTime,GETDATE()) - ArrivalTime))) 来自我的表
然后, @Hrs INT = TotalWaitingMinutesOverall / 60
然后显示时间,
SELECT CONVERT(NVARCHAR(10),@ Hrs)+':'+ CONVERT(NVARCHAR(10),@ TotalWaitingMinutes - (@Hrs * 60))AS TIME