如何在Sql Server中求和(Time(n))?

时间:2014-05-26 11:49:06

标签: sql sql-server

如何使用time(n)运算符的总和,以便我可以计算总时间,但是Sql server说不能添加Time(n)列

我有一个铸造列,其中包含两个日期的差异,并由我作为时间(n)生成。现在我想添加这些列以获得我总共使用了多少时间我需要多少小时分钟才能申请

select Sum(cast ((date1-date2) as Time(0))) from ABC_tbl

其中date1到达时间,date2是日期格式的开始时间,我想要总计所有小时

4 个答案:

答案 0 :(得分:4)

在求和之前将时间转换为整数值(例如,秒):

SELECT SUM(
        datediff(second, '00:00:00', [TimeCol])
    )
FROM
    ...

将[TimeCol]替换为Time(n)列的名称。这将为您提供以秒为单位的总时间,然后您可以轻松将其转换为分钟,小时等...

答案 1 :(得分:1)

希望这个例子可以帮助你。

DECLARE @A TABLE (SD TIME(0),ED TIME(0)) 

INSERT INTO @A VALUES 
('09:01:09','17:59:09'),
('09:08:09','16:10:09'),
('08:55:05','18:00:00')

SELECT  SUM(DATEDIFF(MINUTE,SD,ED)) SUM_IN_MINUTES,
        SUM(DATEDIFF(HOUR,SD,ED)) SUM_IN_HOURS
FROM    @A

<强>结果:

SUM_IN_MINUTES  | SUM_IN_HOURS
---------------------------------------
1505            |       25

答案 2 :(得分:1)

select Sum(DATEDIFF(Minute,date1,date2)) AS TIME from ABC_tbl

你必须使用DATEDIFF函数计算日期差异,然后使用SUM函数计算你的时间总和。 你可以将分钟改为第二小时等。

答案 3 :(得分:0)

试试这个:

DECLARE 
    @MidnightTime TIME = '00:00:00.0000000',
    @MidnightDateTime DATETIME2 = '0001-01-01 00:00:00.0000000';

SELECT  SumOfTime = DATEADD(SECOND, SUM ( DATEDIFF(SECOND, @MidnightTime, x.Col1) ), @MidnightDateTime)
FROM (VALUES 
    (1, CONVERT(TIME, '10:10:10.0000001')),
    (2, CONVERT(TIME, '00:00:05.0000002')),
    (3, CONVERT(TIME, '23:59:59.0000003'))
) x(ID, Col1)
/*
SumOfTime
---------------------------
0001-01-02 10:10:14.0000000 = 1 day (!), 10 hours, 10 minutes, 14 seconds
*/

注意:您可以使用其他精度来代替SECONDMINUTE, HOUR or ... NANOSECOND (see section Arguments > datepart)。使用更高的精度可能会导致Arithmetic overflow错误(使用CONVERT(BIGINT|NUMERIC(...,0), ...)

注意#2:因为精度为SECOND,结果(SumOfTime)的时间为0000000纳秒。