Mysql
 sql >> Database >  >> RDS >> Mysql

Come contare la differenza di date esclusi i fine settimana e i giorni festivi in ​​MySQL

Potresti provare questo:

  1. Conta il numero di giorni lavorativi (preso da qui )

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

    Questo ti dà 261 giorni lavorativi per il 2012.

  2. Ora devi conoscere le tue vacanze che non sono un fine settimana

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

    Il risultato dipende dalla tua tabella delle vacanze.

  3. Dobbiamo ottenerlo in una query:

    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)

    Dovrebbe essere così.

Modifica:Tieni presente che funziona correttamente solo se la data di fine è superiore alla data di inizio.