我有一个包含'accumulate_low_risk'
和'accumulate_high_risk'
的表。两者均为timedata (time(7))
,格式为00:00:00.0000000
。
我想将它们添加到一起,并将它们放入另一个名为“ combined_shift_total”的时间数据中
我试图将它们转换为秒,将结果加在一起,然后将其转换回时间数据,但是我迷路了。
表如下:
CREATE TABLE accumulate_time ('id INT IDENTITY(1,1) PRIMARY KEY,time DATETIME NOT NULL,worker_id INTEGER NOT NULL REFERENCES worker_table(worker_id),shift_start DATETIME NOT NULL,accumulate_low_risk TIME NOT NULL,accumulate_high_risk TIME NOT NULL,combined_shift_total TIME NOT NULL)
我正在尝试一些类似的方法。...
select Sum(Left (CONVERT(nvarchar(30),accumulate_low_risk, 126),2) * 3600 + substring(accumulate_low_risk, 4,2) * 60 + substring(accumulate_low_risk, 7,2))
from accumulate_time WHERE id IN (SELECT max(id) FROM accumulate_time WHERE worker_id = 6)
但这太混乱了。
我对SQL的了解有限,因此我确定有一种简单的方法可以实现这一目标。
我将非常感谢您提供的所有帮助。
谢谢!
答案 0 :(得分:0)
对我来说,它看起来像SQL Server。您可以通过使用datediff()
计算列中的秒数,然后使用00:00:00.0000000
将其添加到dateadd()
中来实现。请注意,我不知道您的数据有多精确,因此,如果您希望我的数据更精确,则需要将second
更改为milisecond
。它是轮班数据,因此不应超过24小时,但是请注意在这种情况下什么是行不通的。
select cast(dateadd(second, datediff(second, '00:00:00.0000000', accumulate_low_risk) + datediff(second, '00:00:00.0000000', accumulate_high_risk), '2019-01-01') as time(7))
from accumulate_time
例如它在临时表上的工作方式:
create table #time (t1 time(7), t2 time(7))
insert into #time values ('01:12:04.0000000','00:12:04.0000000')
select cast(dateadd(second, datediff(second, '00:00:00.0000000', t1) + datediff(second, '00:00:00.0000000', t2), '2019-01-01') as time(7))
from #time