none
Cálculo de horas RRS feed

  • Pergunta

  • Amigos, existe muito tópicos relacionados ao titulo mais ainda não encontrei algo q posso me ajudar com a minha questão:

    Possui um tabela com esta estrutura

    [dbo].[tblRegHorarios](
    [Matricula] [int] NOT NULL,
    [Data] [datetime] NOT NULL,
    [Horario] [datetime] NOT NULL,

    Com estes registros

    145 2015-08-18 00:00:00.000 2015-08-18 08:01:00.000
    145 2015-08-18 00:00:00.000 2015-08-18 12:08:00.000
    145 2015-08-18 00:00:00.000 2015-08-18 13:16:00.000
    145 2015-08-18 00:00:00.000 2015-08-18 17:02:00.000
    145 2015-08-19 00:00:00.000 2015-08-19 08:00:00.000
    145 2015-08-19 00:00:00.000 2015-08-19 12:00:00.000
    145 2015-08-19 00:00:00.000 2015-08-19 13:00:00.000
    145 2015-08-19 00:00:00.000 2015-08-19 17:00:00.000

    Gostaria de saber as horas e minutos trabalhados no dia e não a soma de horas e minutos, considerando os horarios de de 08:00 as 12:00 e 13:00 as 17:00, nos exemplos encontrados foram com campos para os respectivos horarios que não é o caso.

    No Exemplo do dia 18/08/2015  08:07

                               19/08/2015 08:00

    Fico no aguardo da ajuda do colegas.

    segunda-feira, 24 de agosto de 2015 17:54

Respostas

Todas as Respostas

  • Saudações,

    Existe um artigo muito bom do Gustavo Maia e foi onde busquei a resposta para você, montei um exemplo para que possa testar e verificar se te atende.

    CREATE TABLE RESP1
    (
    	ID INT,
    	DATA DATE,
    	HORA TIME
    )
    
    -------------------------------------------------------------------------
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '18-08-2015','08:01:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '18-08-2015','12:08:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '18-08-2015','13:16:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '18-08-2015','17:02:00')
    
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '19-08-2015','08:00:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '19-08-2015','12:00:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '19-08-2015','13:00:00')
    INSERT INTO [RESP1] ([ID],[DATA],[HORA]) VALUES(145, '19-08-2015','17:00:00')
    
    
    
    
    ;WITH LANCA AS (
    SELECT ID,DATA,HORA,
    ROW_NUMBER() OVER (
    PARTITION BY DATA,ID ORDER BY DATA,ID) AS POS
    FROM RESP1
    ),
    LANCAORG AS(
    SELECT  L1.ID,L1.DATA, L1.HORA AS ENTRADA, L2.HORA AS SAIDA
    FROM LANCA AS L1
    INNER JOIN LANCA AS L2 ON
    L1.ID = L2.ID AND L1.DATA = L2.DATA AND L1.POS = L2.POS - 1 AND L1.POS %2=1)
    
    SELECT ID, DATA,
        RIGHT('0' + CAST(SUM(DateDiff(Mi,Entrada,Saida)) / 60 As VARCHAR(2)),2) + ':' +
        RIGHT('0' + CAST(SUM(DateDiff(Mi,Entrada,Saida)) % 60 As VARCHAR(2)),2)
    As CargaHoraria
    FROM LANCAORG GROUP BY ID, Data
    ID              DATA         CargaHoraria
    -------------------------------------------
    145         2015-08-18      07:53
    145         2015-08-19      08:00


    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    terça-feira, 25 de agosto de 2015 00:21
  • Flavio, o exemplo enviado por você deu certo.

    Fico agradecido pela ajuda. Obrigado.

    • Marcado como Resposta adairSilva terça-feira, 25 de agosto de 2015 11:49
    terça-feira, 25 de agosto de 2015 11:49