sql - 使用sql查询总结时间列

标签 sql database sql-server-2008

我有一个表格如下

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

我还尝试将其转换为 floatdatetimetime...

但是全部返回错误...

请帮忙总结一下时间栏....

最佳答案

SQL Fiddle

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/

相关文章:

php - 随机排序php数组

sql - 使用sql连接表

php - mysql查询和php

sql-server-2008 - sql server 2008 中备份完成或失败通知?

c++ - 如何与 SQL Server 2008 建立稳定连接并使用 C++ 编写我的第一个 CRUD 操作

mysql - SQL 如何从表中选择最多 5 个值?

sql - 打印具有空值的列名 oracle

php - DELETE、FROM、WHERE 的正确 mySQL 语法

mysql - 如何与 Git(或 à la Git)同时使用数据库

sql-server - 链接服务器插入选择性能