Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

uzyskaj DATEDIFF z wyłączeniem weekendów przy użyciu serwera sql

Przykładowe zapytanie poniżej, oto kilka szczegółów na temat tego, jak je rozwiązałem.

Używanie DATEDIFF(WK, ...) poda nam liczbę tygodni między 2 datami. SQL Server ocenia to jako różnicę między numerami tygodni, a nie na podstawie liczby dni. To jest idealne, ponieważ możemy to wykorzystać do określenia, ile weekendów minęło między datami.

Możemy więc pomnożyć tę wartość przez 2, aby uzyskać liczbę dni weekendu, które miały miejsce, i odjąć ją od DATEDIFF(dd, ...) aby uzyskać liczbę dni tygodnia.

Nie działa to jednak w 100% poprawnie, gdy data rozpoczęcia lub zakończenia przypada w niedzielę. Więc dodałem w niektórych przypadkach logikę na końcu obliczeń, aby obsłużyć te instancje.

Możesz również rozważyć, czy DATEDIFF powinna być w pełni inkluzywna. np. Czy różnica między 9/10 a 9/11 1 dzień czy 2 dni? Jeśli to drugie, będziesz chciał dodać 1 do produktu końcowego.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego moje połączenie ODBC kończy się niepowodzeniem podczas uruchamiania ładowania SSIS w programie Visual Studio, ale nie podczas uruchamiania tego samego pakietu przy użyciu narzędzia Wykonaj pakiet

  2. Pobieranie danych z MS SQL Server-2008 odwołujących się do wielu tabel

  3. Sortowanie hirarchiczne na serwerze sql, gdy identyfikator podrzędny zawiera '.'

  4. Wybierz liczbę z liczbą 0

  5. SQL Select wartości w nawiasach