sql >> Database teknologi >  >> RDS >> Sqlserver

få DATEDIFF eksklusive weekender ved hjælp af sql server

Eksempel på forespørgsel nedenfor, her er nogle detaljer om, hvordan jeg løste det.

Brug af DATEDIFF(WK, ...) vil give os antallet af uger mellem de 2 datoer. SQL Server vurderer dette som en forskel mellem ugenumre snarere end baseret på antallet af dage. Dette er perfekt, da vi kan bruge dette til at bestemme, hvor mange weekender der gik mellem datoerne.

Så vi kan gange denne værdi med 2 for at få antallet af weekenddage, der fandt sted, og trække det fra DATEDIFF(dd, ...) for at få antallet af hverdage.

Dette opfører sig dog ikke 100 % korrekt, når start- eller slutdatoen falder på søndag. Så jeg tilføjede i nogle tilfælde logik i slutningen af ​​beregningen for at håndtere disse tilfælde.

Du kan også overveje, om DATEDIFF er eller ej skal være fuldt inklusiv. for eksempel. Er forskellen mellem 9/10 og 9/11 1 dag eller 2 dage? Hvis sidstnævnte, vil du gerne tilføje 1 til det endelige produkt.

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. PostgreSQL hvordan opretter man en kopi af en database eller et skema?

  2. Bestil efter faldende dato - måned, dag og år

  3. Ignorerer MySQL null-værdier på unikke begrænsninger?

  4. Hvordan migrerer jeg SQL Server-databasen til MySQL?