sql >> Database >  >> RDS >> Sqlserver

ontvang DATEDIFF met uitzondering van weekends met behulp van sql-server

Voorbeeldquery hieronder, hier zijn enkele details over hoe ik het heb opgelost.

DATEDIFF(WK, ...) gebruiken geeft ons het aantal weken tussen de 2 data. SQL Server evalueert dit als een verschil tussen weeknummers in plaats van op basis van het aantal dagen. Dit is perfect, omdat we dit kunnen gebruiken om te bepalen hoeveel weekenden er tussen de datums zijn verstreken.

Dus we kunnen die waarde met 2 vermenigvuldigen om het aantal weekenddagen te krijgen dat heeft plaatsgevonden en dat af te trekken van de DATEDIFF(dd, ...) om het aantal weekdagen te krijgen.

Dit werkt echter niet 100% correct wanneer de start- of einddatum op zondag valt. Dus heb ik in sommige gevallen logica toegevoegd aan het einde van de berekening om die instanties af te handelen.

U kunt ook overwegen of de DATEDIFF volledig inclusief moeten zijn. bijv. Is het verschil tussen 9/10 en 9/11 1 dag of 2 dagen? Als het laatste het geval is, wil je er 1 aan het eindproduct toevoegen.

declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011',  @d2 = '9/18/2011'

select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
       case when datepart(dw, @d1) = 1 then 1 else 0 end +
      case when datepart(dw, @d2) = 1 then 1 else 0 end


  1. Zeer eenvoudige gebruikersinvoer in django

  2. maak id-kolom op basis van activiteitsgegevens

  3. Hoe gebruik je meerdere databases met php?

  4. bestelpost volgens aangepaste arraypositie