Member 12926744 Ответов: 1

Вычислите сумму продолжительности работы в hr:m:ss в SQL


Всем привет,

Мне нужно рассчитать сумму продолжительности работы .Однако я не получаю правильную продолжительность .Кто-нибудь может мне помочь, пожалуйста .Любая помощь будет очень признательна .

Это продолжительность моей работы:
worduration
8:30:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
9:00:00
8:00:00
9:00:00
9:00:00
9:00:00
1:01:21


Что я уже пробовал:

convert(char(8),dateadd(second,SUM ( DATEPART(hh,(convert(datetime,worduration,1))) * 3600 + DATEPART(mi, (convert(datetime,worduration,1))) * 60 + DATEPART(ss,(convert(datetime,worduration,1)))),0),108) as totalworkdur



Здесь я получаю свою продолжительность работы как :
08:31:21

1 Ответов

Рейтинг:
0

OriginalGriff

Сохраните продолжительность вашей работы в общей сложности в секундах и опубликуйте ее в формате hh:mm:ss только для презентации. Это делает математику проще, намного проще, чем принудительно вводить ее в DateTime, что совершенно неуместно.
DateTime - это "отмеченная точка" во времени, которая состоит из нескольких тиков, начиная с фиксированной точки в прошлом, а не длительности-вам нужен временной интервал, который SQL не поддерживает.

Сохранение его в виде секунд позволяет легко суммировать их, а затем простая функция SQL преобразует его в строку представления:

CREATE FUNCTION [dbo].[ConvertSecondsToHHMMSS]
                (@Seconds INT)
RETURNS         NVARCHAR(20)
AS
BEGIN
    DECLARE @hh INT;
    DECLARE @mm INT;
    DECLARE @ss INT;

    SET @hh = @seconds /60 / 60;
    SET @mm = (@seconds / 60) - (@hh * 60 );
    SET @ss = @seconds % 60;
    RETURN CONVERT(NVARCHAR(9), @hh) + ':' + 
           RIGHT('00' + CONVERT(NVARCHAR(2), @mm), 2) + ':' +
           RIGHT('00' + CONVERT(NVARCHAR(2), @ss), 2)
END