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

Sådan tæller du datoforskel eksklusiv weekend og helligdage i MySQL

Du vil måske prøve dette:

  1. Tæl antallet af arbejdsdage (tog det fra her )

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

    Dette giver dig 261 arbejdsdage for 2012.

  2. Nu skal du kende dine ferier, der ikke er på weekend

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

    Resultatet af dette afhænger af dit feriebord.

  3. Vi skal have det i én forespørgsel:

    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)

    Dette burde være det.

Rediger:Vær opmærksom på, at dette kun fungerer korrekt, hvis din slutdato er højere end din startdato.



  1. Returner dynamisk tabel med ukendte kolonner fra PL/pgSQL-funktionen

  2. Tjek, om en streng indeholder en understreng i SQL Server 2005, ved hjælp af en lagret procedure

  3. Videregivelse af kolonnenavne dynamisk for en postvariabel i PostgreSQL

  4. Find ud af, om Oracle-date er i en weekend?