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

Jak dostać 14 dni przed podanym terminem unikając świąt

Obliczyłbym datę za pomocą funkcji takiej jak ta poniżej (której używam)

public static DateTime AddBusinessDays(DateTime date, int days)
 {
    if (days == 0) return date;

   if (date.DayOfWeek == DayOfWeek.Saturday)
   {
    date = date.AddDays(2);
    days -= 1;
  }
  else if (date.DayOfWeek == DayOfWeek.Sunday)
  {
    date = date.AddDays(1);
    days -= 1;
  } 



 date = date.AddDays(days / 5 * 7);
 int extraDays = days % 5;

 if ((int)date.DayOfWeek + extraDays > 5)
 {
    extraDays += 2;
 }

int extraDaysForHolidays =-1;
//Load holidays from DB into list
List<DateTime> dates = GetHolidays();

while(extraDaysForHolidays !=0)
{

 var days =  dates.Where(x => x >= date  && x <= date.AddDays(extraDays)).Count;
 extraDaysForHolidays =days;
 extraDays+=days;  
}


return date.AddDays(extraDays);

}

Nie testowałem sekcji ast, która robi święta



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLException :ciąg znaków lub dane binarne zostaną obcięte

  2. Zapytanie SQL, aby kolumna liczb była ciągiem

  3. Nie można już połączyć się z lokalną bazą danych SQL Server 2008

  4. Analiza przypadku aktualizacji sprzętu serwera bazy danych SQL Server

  5. Przyspieszone odzyskiwanie baz danych w programie SQL Server 2019