Неправильно Общий объем производства? - PullRequest
0 голосов
/ 06 октября 2009

Пример

Я хочу рассчитать рабочее время с 09:00:00 до 18:00: 00

09:00:00 - Normal_Intime
18:00:00 - Normal_Outtime

Пусть

1) Intime is 10:00:00, Outtime is 17:00:00 It should give the output as 07:00:00
2) Intime is 08:00:00. Outtime is 19:00:00 It should give the output as 09:00:00

выше вывода должны сравниваться с Normal_Intime, Normal_Outtime.

Означает, что Normal_Intime - только 09:00:00, а Normal_Output - только 18:00:00, поэтому Intime не должен> 09:00:00 и Outtime <18:00:00. </p>

Запрос

select Intime, Outtime, CONVERT(char(8), CASE WHEN OutTime > Normal_Outtime THEN cast(Normal_Outtime AS datetime) ELSE cast(OutTime AS datetime) END - CASE WHEN InTime > Normal_Intime THEN cast(InTime AS datetime) ELSE cast(Normal_Intime AS datetime) END, 8) AS WorkTime from table

выход

Intime       Outtime        Worktime
15:37:48    22:08:15    02:22:12
07:33:34    07:59:13    22:59:13

Второй ряд дает неправильный вывод. Он должен давать только 00:25:39

.

Если время входа и выхода меньше, чем NormalInTime, а время входа и выхода больше, чем NormalOutTime. Как сделать для этого условие

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

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

Ответы [ 3 ]

2 голосов
/ 06 октября 2009

Это должно дать вам то, что вы хотите

DECLARE @Table TABLE(
        InTime DATETIME,
        OutTime DATETIME
)

INSERT INTO @Table (InTime,OutTime) SELECT '15:37:48', '22:08:15'
INSERT INTO @Table (InTime,OutTime) SELECT '07:33:34', '07:59:13'

DECLARE @Normal_InTime DATETIME,
        @Normal_OutTime DATETIME

SELECT  @Normal_InTime = '09:00:00',
        @Normal_OutTime = '18:00:00'

SELECT  *,
        --both dates are smaller than NotmalInTime
        CASE
            WHEN InTime < @Normal_InTime AND OutTime < @Normal_InTime THEN OutTime - InTime
            WHEN OutTime > @Normal_OutTime AND InTime > @Normal_OutTime THEN OutTime - InTime
            WHEN OutTime > @Normal_OutTime 
                THEN @Normal_OutTime - InTime
            WHEN InTime < @Normal_InTime
                THEN OutTime - @Normal_InTime
            ELSE OutTime - InTime
        END
FROM    @Table

Но вы должны принять во внимание. Что происходит, когда пользователь регистрируется до 24:00, а затем выходит на следующий день.

И, как я уже сказал, что происходит в случае, если вход и выход из книги происходит до NormalTimeIn или после NormalTimeOut?

Вы должны указать это.

1 голос
/ 06 октября 2009

ВЫ ДОЛЖНЫ РАССМОТРЕТЬ ДАТУ ТАКЖЕ ПРИ РАСЧЕТЕ ВРЕМЕНИ.

declare 
@Normal_Intime datetime,
@Normal_Outtime datetime,
@Actual_Intime datetime,
@Actual_Outtime datetime
set @Normal_Intime = cast('09:00:00' as datetime)
set @Normal_Outtime =cast('18:00:00' as datetime) 

-- CASE 1
set @Actual_Outtime = cast('17:00:00' as datetime)  
set @Actual_Intime = cast('10:00:00' as datetime)  

select case when @Actual_Intime > @Normal_Intime then @Actual_Intime else @Normal_Intime end -
case when @Actual_Outtime < @Normal_Outtime then @Actual_Outtime else @Normal_Outtime end

-- CASE 2    

set @Actual_Outtime = cast('19:00:00' as datetime)    
set @Actual_Intime = cast('08:00:00' as datetime)    

select case when @Actual_Intime > @Normal_Intime then @Actual_Intime else @Normal_Intime end -
case when @Actual_Outtime < @Normal_Outtime then @Actual_Outtime else @Normal_Outtime end

-- CASE 3  

set @Actual_Outtime = cast('07:59:13' as datetime)    
set @Actual_Intime = cast('07:33:34' as datetime)    

select case when @Actual_Intime > @Normal_Intime then @Actual_Intime else @Normal_Intime end -
case when @Actual_Outtime < @Normal_Outtime then @Actual_Outtime else @Normal_Outtime end
0 голосов
/ 06 октября 2009

Вы пробовали это:

SELECT CONVERT(varchar, Outtime - Intime, 108) FROM YourTable

Outtime - Intime даст вам желаемый промежуток времени, а преобразование с параметром 108 даст вам только часы, минуты и секунды с этого промежутка времени больше информации о преобразовании

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...