sql >> Base de Datos >  >> RDS >> Sqlserver

obtener DATEDIFF excluyendo los fines de semana usando el servidor sql

Ejemplo de consulta a continuación, aquí hay algunos detalles sobre cómo lo resolví.

Usando DATEDIFF(WK, ...) nos dará el número de semanas entre las 2 fechas. SQL Server evalúa esto como una diferencia entre los números de semana en lugar de basarse en la cantidad de días. Esto es perfecto, ya que podemos usarlo para determinar cuántos fines de semana pasaron entre las fechas.

Entonces podemos multiplicar ese valor por 2 para obtener el número de días de fin de semana que ocurrieron y restarlo del DATEDIFF(dd, ...) para obtener el número de días de la semana.

Sin embargo, esto no se comporta correctamente al 100% cuando la fecha de inicio o finalización cae en domingo. Así que agregué cierta lógica de casos al final del cálculo para manejar esas instancias.

También puede considerar si el DATEDIFF debe ser totalmente inclusivo. p.ej. ¿La diferencia entre el 10/9 y el 11/9 es 1 día o 2 días? Si es lo último, querrá agregar 1 al producto final.

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