sql >> Databasteknik >  >> RDS >> Sqlserver

få DATEDIFF exklusive helger med sql-server

Exempelfråga nedan, här är några detaljer om hur jag löste det.

Använder DATEDIFF(WK, ...) kommer att ge oss antalet veckor mellan de 2 datumen. SQL Server utvärderar detta som en skillnad mellan veckonummer snarare än baserat på antalet dagar. Detta är perfekt, eftersom vi kan använda detta för att avgöra hur många helger som gick mellan datumen.

Så vi kan multiplicera det värdet med 2 för att få antalet helgdagar som inträffade och subtrahera det från DATEDIFF(dd, ...) för att få antalet vardagar.

Detta fungerar dock inte till 100 % korrekt när start- eller slutdatumet infaller på söndag. Så jag lade till i vissa fall logik i slutet av beräkningen för att hantera dessa instanser.

Du kanske också vill överväga om DATEDIFF är eller inte bör vara helt inkluderande. t.ex. Är skillnaden mellan 9/10 och 9/11 1 dag eller 2 dagar? Om det är det senare, vill du lägga till 1 till slutprodukten.

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. ORA-00604 ORA-12705

  2. Oracle - Skapa ett index endast om det inte finns

  3. Biblioteket är inte laddat:/usr/local/lib/libpq.5.4.dylib

  4. Tillgång till SQL Server-meddelanden via ADO.NET