sql >> Databáze >  >> RDS >> Sqlserver

získejte DATEDIFF kromě víkendů pomocí serveru SQL

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


  1. Chyba ORA-00932 při použití výběru s polem Union a CLOB

  2. dynamicky předat název tabulky ve smyčce oracle for

  3. Chyba java.sql.SQLException:ORA-00911:neplatný znak

  4. Používáte volitelné parametry, když je příchozí hodnota null?