Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alencars

SQL Server

Recommended Posts

Gerei o código abaixo e gostaria que o retorno fosse somente em horas uteis, tendo em vista que trabalho de segunda a sexta das 08: as 18. Como proceder?Esse é um sistema de help desk e gostaria de quantificar os chamados com mais de 2 horas de atendimentoDesde já muito grato.

CREATE FUNCTION fcnDiasUteis (@DataInicial datetime, @DataFinal datetime)RETURNS intASBEGIN-- Cria variaveisDECLARE @Feriados int, @Retorno int, @DiasAUX int, @DataAUX datetime-- Seta primeiro dia da semana em domingo--SET DATEFIRST 7-- Monta cursorDECLARE CursorFeriado CURSOR FORSELECT count(*) 'Total' FROM tab_Calendario WHERE dhinicio BETWEEN @DataInicial + 1 AND @DataFinalAND DATEPART(dw, dhinicio) NOT IN (1, 7)-- Abre cursorOPEN CursorFeriado-- Pega primeiroFETCH NEXT FROM CursorFeriado INTO @Feriados-- Seta dias úteis como 0SET @Retorno = DateDiff(d, @DataInicial, @DataFinal)-- Seta data auxiliar para cálculosSET @DataAUX = @DataFinal-- Contabiliza dias úteisWHILE @DataInicial <= @DataAUXBEGIN-- Se for final de semana, desconsidera do totalIF DATEPART(dw, @DataAUX) IN (1, 7)BEGINSET @Retorno = @Retorno - 1END-- Subtrai um da data auxiliarSET @DataAUX = @DataAUX - 1END-- Corrige caso data inicial seja um FDSIF DATEPART(dw, @DataInicial) IN (1, 7)BEGINSET @Retorno = @Retorno + 1END-- Fecha cursorCLOSE CursorFeriadoDEALLOCATE CursorFeriado-- Desconsidera os feriadosSET @Retorno = @Retorno - @FeriadosRETURN(@RETORNO)END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alencars,

 

Esta função que você criou, pelo que entendi, deveria retornar a quantidade de dias úteis em um intervalo de datas qualquer.

 

Ela desconsidera os finais de semana "IF DATEPART(dw, @DataAUX) IN (1, 7)", mas não existe tratamento de feriados... recomendo você criar uma tabela de feriados e tratar na trigger descontando um dia caso aquele dia exista na tabela de feriados.

 

Fora isto, se está função fizer realmente o que se propõem, basta multiplicar a quantidade de dias úteis retornados por ela pela quantidade de horas que você trabalha por dia... se forem 10 horas como você indicou, faça :

 

select fcnDiasUteis(Data1, Data2) * 10 as HorasTrabalhadas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Existe sim a Tab feriado e os cursoresDECLARE CursorFeriado CURSOR FOR para validar se o dia é util ou não.SELECT count(*) 'Total' FROM tab_Calendario Consegui resolver a minha questão, mas agora eu quero pegar o meu retorno que está em segundos e quero uma função que transforme em dd/mm/ss, ou seja, se o valor for 268220 me mostre em 3dias 2horas 30min e 20seg.Mais uma vez gratoRogerio

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.