【问题标题】:Get the total sum hours in a column SQL SERVER获取 SQL SERVER 列中的总小时数
【发布时间】:2018-09-17 08:40:54
【问题描述】:

Sql Fiddle Example

我有这个结果表

 Id     Hours
 -----   -----
 1       09:00
 2       09:30
 3       10:00
 4       10:30
 5       11:00
 6       11:30
 7       12:00
 8       12:30
 9       13:00
10       13:30
11       14:00
12       14:30
13       15:00
14       15:30
15       16:00
16       16:30
17       17:00
18       17:30
19       18:00

我需要获取总小时数,例如从 09:00 到 18:00 总共有:

9

小时,我需要得到这个小时数

【问题讨论】:

  • 你的意思是 max(Hours) - min(Hours) 吗?
  • 我想得到两个小时之间的总小时数,例如从 9:00 到 12:00 总共有 3 小时
  • 如果最后一次是17:30呢?!

标签: sql sql-server calculated-columns hour


【解决方案1】:

你的表架构hourvarchar,需要转换成时间,然后计算

SELECT  datediff(hour,min(cast(hour as time)),max(cast(hour as time)))
FROM Timetable

sqlfiddle

注意

我建议您将hour 列为datetimetime 而不是varchar。因为hour栏目的是时间。


编辑

如果您的时间是9:00 to 17:30,您可以尝试使用datediff 分钟获取总差异分钟,然后除以60 得到小时。

SELECT datediff(minute,min(cast(hour as time)),max(cast(hour as time))) / CAST(60 as float)
FROM Timetable

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6e005cdfad4eca3ff7c4c92ef14cc9c7

【讨论】:

  • 如果最后一次是17:30呢?!
【解决方案2】:

使用datediff函数

select datediff(hour,min(h),max(h)) from
(

select CAST(hour AS TIME) as h from Timetable
  ) as  t

强烈不同意将时间值放在 varchar 中,因此最好将数据类型从 varchar 更改为 time

【讨论】:

  • 你在 varchar 中的数据,这就是为什么它显示 1 btw i sidited answer
【解决方案3】:
declare @a time = '13:00',@b time = '17:30'  --- Here you can give time, what you need.
select distinct convert(varchar(20)
, datediff(MINUTE,@a,@b) / 60) 
  + ':' + 
  convert(varchar(20), datediff(MINUTE,@a,@b) % 60) 
from #Timetable 
where hour in (@a,@b)

用于您的 SQL Fiddle 示例数据。

【讨论】:

    【解决方案4】:

    显然,您需要使用datediff()。但是,您应该在几分钟或几秒钟内完成datediff(),然后转换为小时:

    SELECT datediff(minute, min(cast(hour as time)), max(cast(hour as time))) / 60.0
    FROM Timetable;
    

    这将处理小时数不是确切小时数的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      相关资源
      最近更新 更多