Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

вземете DATEDIFF с изключение на почивните дни, като използвате sql сървър

Примерна заявка по-долу, ето някои подробности за това как я реших.

Използване на DATEDIFF(WK, ...) ще ни даде броя на седмиците между двете дати. SQL Server оценява това като разлика между номерата на седмиците, а не въз основа на броя на дните. Това е перфектно, тъй като можем да го използваме, за да определим колко уикенда са изминали между датите.

Така че можем да умножим тази стойност по 2, за да получим броя на настъпилите почивни дни и да извадим това от DATEDIFF(dd, ...) за да получите броя на дните от седмицата.

Това обаче не работи 100% правилно, когато началната или крайната дата пада в неделя. Така че добавих в някои случаи логика в края на изчислението, за да се справя с тези случаи.

Може също така да обмислите дали DATEDIFF трябва да бъдат напълно включващи. напр. Разликата между 9/10 и 9/11 1 ден ли е или 2 дни? Ако е последното, ще искате да добавите 1 към крайния продукт.

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. Как да предадете нулева променлива към SQL съхранена процедура от C#.net код

  2. Получаване на зависимости от кръстосани бази данни на SQL Server

  3. Използване на колона TIME на SQL Server 2008 в декларацията на клас

  4. .NET Core на Azure не може да се свърже с базата данни на SQL Server

  5. Добавяне на намек за заявка при извикване на функция с таблична стойност