在Sql中为所有列添加两个日期的日期差异

时间:2014-03-11 11:35:20

标签: sql sql-server sql-server-2008 date datetime

我有一个包含两个日期列的表格,其中 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

这只会给出特定的日期差异。我需要表格中的所有日期差异然后总结。

6 个答案:

答案 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