【问题标题】:how to sum only hours from datetime field in sql如何从sql中的日期时间字段中仅计算小时数
【发布时间】:2015-02-18 16:47:58
【问题描述】:

我正在尝试汇总 sql 中 datetime 列的小时数,但尝试此操作时出现错误:

SELECT 
    DATEADD(HH, SUM(DATEDIFF(HH, '00:00:00.000', myDate)), '00:00:00.000') as Total_Hours 
FROM myTable 
WHERE ID in (1, 2)

我的日期列是这样的

2015-02-18 00:00:00.000
2015-02-18 00:30:00.000
2015-02-18 01:00:00.000
2015-02-18 01:30:00.000

我如何求和并只显示总小时数而不显示日期?

【问题讨论】:

  • 你想从样本数据中得到什么结果?
  • 如果我添加这两个日期时间:2015-02-18 00:00:00.000 2015-02-18 00:30:00.000 我应该得到 30 分钟的总小时数

标签: sql sql-server tsql datetime


【解决方案1】:

也许您想提取小时数并将它们相加?绝对不需要转换回数据:

SELECT SUM(DATEPART(hour, myDate)) as Total_Hours
FROM myTable 
WHERE ID in (1, 2);

编辑;

如果要添加时间组件,则使用分钟或秒:

SELECT SUM(DATEPART(second, myDate)) / (60.0 * 60.0) as Total_Hours
FROM myTable 
WHERE ID in (1, 2);

【讨论】:

  • 如果你添加前 2 个,它应该给你 30 分钟,但在你的查询中它给了我 0
  • @moe 。 . .那么你不想增加小时数。
  • 感谢 Gordon,但我得到了 0.0000。日期时间字段是 30 分钟间隔,例如,1:00、1:30、2:00、2:30 等,所以如果我从 1:00 到 1:30 添加,那么我应该得到 30 分钟,对吗?谢谢
【解决方案2】:

我觉得你想把时间部分加在一起:

select Total_Hours = datepart(hour, cast(myDate as time))
from myTable
where id in (1, 2)

【讨论】:

  • 是的 Ako,但我看不出你在哪里总结了这里的总小时数
  • 已添加,但在您的示例中为 0,因为 '00:30:00' 中的小时数为 0。
  • 我在这里很困惑,请在这里帮帮我,在我的示例中有 4 个条目,所以如果我添加所有这些时间,即上午 12:00 到 1:30,所以我希望看到总小时数=1.30。我基本上是想把所有的小时/分钟加起来。谢谢
  • 您的 sql 示例说明了 where id in (1, 2) ,所以我认为您只选择了前两行。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多