Calculando intervalo entre datas excluindo os finais de semana – MySQL

Olá, tudo bem?!

 

O problema

Calcular a diferença entre duas datas no MySQL é algo muito simples e fácil de se aplicar, recentemente tive a necessidade de realizar esta task, porém excluindo do total de dias os finais de semana. Após algumas horas de pesquisa e testes, cheguei ao resultado desejado e irei compartilhar com vocês.

 

Resolução e demonstração prática

Para aplicação prática devemos inicialmente criar nosso banco de dados teste. Para a estrutura da tabela utilize o modelo abaixo.

Devemos agora realizar a inserção de dados para testes.

Com o ambiente de testes configurado, podemos agora executar a query para busca de dados.  Inicialmente faremos a pesquisa da forma tradicional com o datediff. Execute o seguinte comando MySQL.

Como resultados devemos obter:

data_cadastrodata_retiradatotal_dias
2018-06-05 00:00:002018-06-11 00:00:006
2018-06-01 00:00:002018-06-30 00:00:0029
2018-04-01 00:00:002018-06-30 00:00:0090

Como podemos observar, foi realizado a totalização do intervalo de datas como previmos.

Devemos agora realizar a criação de uma function para se encarregar do cálculo que desejamos, abaixo segue os códigos:

Observação: O código da função não é de minha autoria, foi com base em pesquisa, porém decidi escrever o post algum tempo depois, com isso não localizei a fonte de origem. Caso encontre irei atualizar o post.

Podemos agora atualizar nossa query SQL, fazendo uso da função criada.

Como resultado devemos obter:

data_cadastrodata_retiradatotal_diasdias_uteis
2018-06-05 00:00:002018-06-11 00:00:0064
2018-06-01 00:00:002018-06-30 00:00:002920
2018-04-01 00:00:002018-06-30 00:00:009064

Tendo a função como base, podemos futuramente criar uma tabela com as datas de feriados ou dias a serem excluídos e subtrair dos dias úteis, bastando apenas atualizar a função. Deixe um comentário caso tenha interesse que eu escreva um post sobre o assunto.

 

Considerações finais

Fazendo uso de uma função pudemos obter o resultado desejado, facilitando seu uso e centralizando a ação.

 

Agradecimentos

Espero que tenham apreciado esta dica, pois levei um bom tempinho para chegar nessa solução, além de tudo espero que seja útil em seu dia a dia.

Agradeço pela sua atenção e sucesso em seus projetos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *