Как вычесть часы с условием - PullRequest
0 голосов
/ 03 февраля 2011

Использование SQL Server

Table1

ID, MinTime, TotalTime, BreakTime

001, 04:00:00, 12:00:00, 00:30:00
002, 04:00:00, 03:00:00, 00:30:00
003, 08:00:00, 07:30:00, 03:30:00
004, 04:00:00, 03:59:59, 01:30:00

.

Я хочу вычесть общее время-прерывание, когда totaltime> mintime

Condtion:

If Totaltime is greater than mintime then it should deduct the total hours, but it should Maintain the  MinTime

Например:

Min time: 05:00:00
Total Time: 06:00:00
BreakTime: 01:30:00

Общее время больше, чем минимальное время, поэтому мы можем сделать (totaltime-Breaktime), он будет выдавать как «04:30:00» (это неправильно, потому что он должен поддерживатьминимальное время также, поэтому он должен вычитать 1 час только из времени перерыва)

Ожидаемый результат

ID, MinTime, TotalTime, BreakTime DeductTime

001, 04:00:00, 12:00:00, 00:30:00 11:30:00 (TotalTime is Greater than mintime)
002, 04:00:00, 04:35:00, 01:00:00 04:00:00 (`Here TotalTime is greather than mintime, so it should deduct the breaktime from the total hours, but it should maintain the mintime also)`
003, 08:00:00, 07:30:00, 03:30:00 07:30:00 (TotalTime is less than mintime)
004, 04:00:00, 03:59:59, 01:30:00 03:59:59 (TotalTime is less than mintime)

Как сделать запрос для вышеуказанного условия.

Нужна помощь с запросом

Ответы [ 3 ]

2 голосов
/ 03 февраля 2011

Вы можете использовать CASE Заявление

SELECT  ID
        , MinTime
        , TotalTime
        , BreakTime
        , CASE WHEN TotalTime < MinTime THEN TotalTime
               WHEN TotalTime - BreakTime < MinTime THEN MinTime
               ELSE TotalTime
          END AS DeductTime
FROM    Table1

CASE (Transact-SQL)
Оценивает список условий и возвращает один из нескольких возможных выражения результата.

1 голос
/ 03 февраля 2011

Если ваш тип данных не datetime и nvarchar, посмотрите этот ответ:

Как сгенерировать дату

0 голосов
/ 03 февраля 2011

Попробуйте использовать пользовательскую функцию.

create function GetTotalHours (@BreakTime datetime,@Totaltime datetime, @MinTime DateTime) returns datetime
as
begin
declare @newTotalTime datetime;
declare @DiffenceInHours int;
set @DiffenceInHours = datediff(HH,@BreakTime,@Totaltime);

if @Totaltime >@MinTime
    begin --If Totaltime is greater than mintime then it should deduct the total hours
        set @newTotalTime=dateDiff(HH,@DiffenceInHours,@Totaltime);
    end
else
    begin--If totaltime is smaller than mintime then it should not deduct the total hours
        set @newTotalTime=@Totaltime;
    end

return @newTotalTime ;
end
go

Затем выберите из таблицы, используя udf, что-то вроде этого ...

select dbo.GetTotalHours('2011-02-03 14:51:48.620',
    '2011-02-03 11:51:48.620','2011-02-03 11:51:48.620')
from  [YourSourceTable]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...