Maher_ITbv Ответов: 1

язык SQL .. Как рассчитать DATEDIFF час с минутами


Как можно было вернуть чч:мм
ALTER FUNCTION [dbo].[fn_GetTotal_Hour_and_Munites]
(
    @DateFrom Datetime,
    @DateTo Datetime
)
RETURNS DECIMAL(18,2)
AS
BEGIN
 
DECLARE @TotalWorkDays INT, @TotalTimeDiff DECIMAL(18, 2)
 
SET @TotalWorkDays = DATEDIFF(DAY, @DateFrom, @DateTo)
				    -(DATEDIFF(WEEK, @DateFrom, @DateTo) * 2)
					   -CASE
                                    WHEN DATENAME(WEEKDAY, @DateFrom) = 'Sunday'
                                    THEN 1
                                    ELSE 0
                                END+CASE
                                        WHEN DATENAME(WEEKDAY, @DateTo) = 'Saturday'
                                        THEN 1
                                        ELSE 0
                                    END;
SET @TotalTimeDiff =
(
    SELECT DATEDIFF(SECOND,
                   (
                       SELECT CONVERT(Time, @DateFrom)
                   ),
                   (
                       SELECT CONVERT(Time, @DateTo)
                   )) %3600 /60
);
 
RETURN  (SELECT(@TotalWorkDays *24*60*60) + @TotalTimeDiff)
END

==========================================
эта функция возвращает только минуты 00:23
==========================================
но не говорите менять на /3600.0
RETURN (SELECT(@TotalWorkDays * 24) + @TotalTimeDiff)

потому что он возвращается на секунду больше, чем 59, как 10:86
Я просто хочу, чтобы Макс секунда была 59
например, в 10:59

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

Я пытался измениться

)) /3600
);

RETURN (SELECT(@TotalWorkDays *24) + @TotalTimeDiff)
================================================
эта функция возвращает OUTPOT часов только 10:00
================================================
как можно вернуть час с минутами? 10:23, чтобы быть максимальным, как 10:59, а не 10:86

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

1. получите фактическую разницу в секундах

SET @d = DATEDIFF(s, @start, @end)

2. Добавьте количество секунд к 0
DATEADD(s, @d, 0)


Например, за 123 секунды он создаст 01/01/1900 00:02:03...