Příklad dotazu níže, zde jsou některé podrobnosti o tom, jak jsem to vyřešil.
Pomocí DATEDIFF(WK, ...)
nám poskytne počet týdnů mezi těmito 2 daty. SQL Server to vyhodnotí jako rozdíl mezi čísly týdnů spíše než na základě počtu dní. To je perfektní, protože to můžeme použít k určení, kolik víkendů uplynulo mezi daty.
Tuto hodnotu tedy můžeme vynásobit dvěma, abychom získali počet víkendových dnů, které nastaly, a odečíst jej od DATEDIFF(dd, ...)
získat počet dnů v týdnu.
To se však nechová 100% správně, když datum zahájení nebo ukončení připadá na neděli. Takže jsem v některých případech přidal na konec výpočtu logiku, abych tyto případy zvládl.
Můžete také zvážit, zda DATEDIFF
by měla být plně inkluzivní. např. Je rozdíl mezi 9/10 a 9/11 1 den nebo 2 dny? Pokud je to druhé, budete chtít přidat 1 ke konečnému produktu.
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