如何在 SQL Server 中总结时间字段

新手上路,请多包涵

我有一个名为“WrkHrs”的列,数据类型是时间(hh:mm:ss)。我想总结一下员工的工作时间。但由于是时间数据类型 sql server 不允许我使用 sum(columnname)

如何总结sql查询中的时间数据类型?

原文由 Sas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
2 个回答
SELECT EmployeeID, minutes_worked = SUM(DATEDIFF(MINUTE, '0:00:00', WrkHrs))
FROM dbo.table
-- WHERE ...
GROUP BY EmployeeID;

您可以在前端对其进行漂亮的格式化。或者在 T-SQL 中:

 ;WITH w(e, mw) AS
(
    SELECT EmployeeID, SUM(DATEDIFF(MINUTE, '0:00:00', WrkHrs))
    FROM dbo.table
    -- WHERE ...
    GROUP BY EmployeeID
)
SELECT EmployeeID = e,
  WrkHrs = RTRIM(mw/60) + ':' + RIGHT('0' + RTRIM(mw%60),2)
  FROM w;

但是,您使用了错误的数据类型。 TIME 用于指示时间点,而不是间隔或持续时间。将他们的工作时间存储在两个不同的列中是否有意义, StartTimeEndTime

原文由 Aaron Bertrand 发布,翻译遵循 CC BY-SA 3.0 许可协议

select DATEDIFF(MINUTE, '0:00:00', '00:02:08')

结果:- 2

 select DATEDIFF(SECOND, '0:00:00', '00:02:08')

结果:- 128

使用秒可以给出更好的答案。

所以我认为答案可以是

SELECT
    EmployeeId
    , seconds_worked = SUM (DATEDIFF (SECOND, '0:00:00', WrkHrs))
FROM
    tbl_employee
GROUP BY
    EmployeeId;

原文由 ankur 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进