Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como contar a diferença de datas excluindo fins de semana e feriados no MySQL


Você pode querer tentar isso:

  1. Conte o número de dias úteis (peguei de aqui )

    SELECT 5 * (DATEDIFF('2012-12-31', '2012-01-01') DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY('2012-01-01') + WEEKDAY('2012-12-31') + 1, 1)

    Isso lhe dá 261 dias úteis para 2012.

  2. Agora você precisa saber quais são suas férias que não são em um final de semana

    SELECT COUNT(*) FROM holidays WHERE DAYOFWEEK(holiday) < 6

    O resultado disso depende da sua mesa de férias.

  3. Precisamos obter isso em uma consulta:

    SELECT 5 * (DATEDIFF('2012-12-31', '2012-01-01') DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY('2012-01-01') + WEEKDAY('2012-12-31') + 1, 1) - (SELECT COUNT(*) FROM holidays WHERE DAYOFWEEK(holiday) < 6)

    Deve ser isso.

Editar:Esteja ciente de que isso só funciona corretamente se sua data de término for maior que sua data de início.