我有一个表格如下
repID ClockIn ClockOut TotalHours
109145 7:50:50 AM 3:37:16 PM 7:46:26
109145 7:52:41 AM 3:44:51 PM 7:52:10
109145 8:42:40 AM 3:46:29 PM 7:3:49
109145 7:50:52 AM 3:42:59 PM 7:52:7
109145 8:09:23 AM 3:36:55 PM 7:27:32
这里 'TotalHours
' 列是作为 ClockIn 和 ClockOut 的差异获得的
现在我需要将所有数据添加到“TotalHours
”列中,其数据类型为 (varchar
)。
我应该如何添加这一列......
我试过
select SUM(TotalHours)
但它返回一个错误:
Operand data type varchar is invalid for sum operator
我还尝试将其转换为 float
、datetime
和 time
...
但是全部返回错误...
请帮忙总结一下时间栏....
最佳答案
MS SQL Server 2008 架构设置:
CREATE TABLE Table2
([repID] int, [ClockIn] datetime, [ClockOut] datetime, [TotalHours] varchar(7))
;
INSERT INTO Table2
([repID], [ClockIn], [ClockOut], [TotalHours])
VALUES
(109145, '7:50:50 AM', '3:37:16 PM', '7:46:26'),
(109145, '7:52:41 AM', '3:44:51 PM', '7:52:10'),
(109145, '8:42:40 AM', '3:46:29 PM', '7:3:49'),
(109145, '7:50:52 AM', '3:42:59 PM', '7:52:7'),
(109145, '8:09:23 AM', '3:36:55 PM', '7:27:32')
;
查询 1:
SELECT convert(varchar(8), dateadd(second, SUM(DATEDIFF(SECOND, ClockIn, ClockOut)), 0), 108)
from Table2
group by repID
Results :
| COLUMN_0 |
------------
| 14:02:04 |
查询 2:
select sum(datediff(second,ClockIn,ClockOut))/3600 as hours_worked
from Table2
Results :
| hours_worked|
------------
| 38 |
查询 3:
select sum(datediff(minute, 0, TotalHours)) / 60.0 as hours_worked
from Table2
Results :
| HOURS_WORKED |
----------------
| 38 |
这里的最后一个查询是从 FreeLancers 的回答中提取的,因为我很想知道它是否有效。
在这里,首先您需要将日期时间差转换为秒或分钟,然后将该时间转换回小时。
希望这对您有所帮助。
关于sql - 使用sql查询总结时间列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834549/