如何使用time(n)运算符的总和,以便我可以计算总时间,但是Sql server说不能添加Time(n)列
我有一个铸造列,其中包含两个日期的差异,并由我作为时间(n)生成。现在我想添加这些列以获得我总共使用了多少时间我需要多少小时分钟才能申请
select Sum(cast ((date1-date2) as Time(0))) from ABC_tbl
其中date1到达时间,date2是日期格式的开始时间,我想要总计所有小时
答案 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
*/
注意:您可以使用其他精度来代替SECOND
:MINUTE, HOUR or ... NANOSECOND (see section Arguments > datepart)。使用更高的精度可能会导致Arithmetic overflow
错误(使用CONVERT(BIGINT|NUMERIC(...,0), ...)
。
注意#2:因为精度为SECOND
,结果(SumOfTime
)的时间为0000000
纳秒。