【问题标题】:Adding date difference of two dates in Sql for all columns在Sql中为所有列添加两个日期的日期差
【发布时间】:2014-03-11 11:35:20
【问题描述】:

我有一个表格,其中包含两个日期列,分别是 ArrivalDateDepartureDate。 我需要计算表中所有条目的小时和分钟(不是日期)的总时间段。我可以通过 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

这只给出了一个特定的日期差异。我需要表格中的所有日期差异,然后求和。

【问题讨论】:

  • 请提供样本输出!
  • 如果您只是在该 select 语句之后添加 FROM tableName,并将 \@StartDate 和 \@EndDate 更改为日期列,您不会得到想要的结果吗?
  • 为什么要将变量转换为 VARCHAR,然后再转换回 DATETIME,然后再从另一个中减去?
  • 找出以秒为单位的差异,然后根据需要将其相加,然后将最终数字转换为小时/分钟
  • @Himansz 你想要的输出是什么?

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


【解决方案1】:

此查询将生成您正在寻找的结果:

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 列合并为您所有到达和离开日期之间经过的小时数和分钟数的总和。

【讨论】:

  • 开始和结束日期必须颠倒,否则你会得到负整数。
【解决方案2】:

试试这个:

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 应该可以解决问题。

【讨论】:

  • 嗯,如果两个日期相隔 1 小时 23 分钟,这将给出 1 小时 83 分钟...
【解决方案3】:

你可以试试这样的..

SELECT CAST( (SUM(DATEDIFF(mi , ARRIVALDATE , DEPARTUREDATE)))/60 AS VARCHAR(10)) 
        + ':'+  
       CAST( (SUM(DATEDIFF(mi , ARRIVALDATE , DEPARTUREDATE)))%60 AS VARCHAR(10))
FROM YOURTABLE

这只是一个伪代码..根据需要替换表和列名..

【讨论】:

  • 您正在转换为分钟和秒,而不是小时和分钟
【解决方案4】:

如果你有很长的时间段 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

【讨论】:

    【解决方案5】:

    试试这个

    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
    

    【讨论】:

      【解决方案6】:

      我试过了

      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)) 作为时间

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 2013-09-03
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多