Saltar al contenido

obtener DATEDIFF excluyendo los fines de semana usando el servidor sql

Paúl, parte de nuestro equipo, nos hizo el favor de crear este post ya que controla perfectamente dicho tema.

Solución:

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é en algunos casos lógica al final del cálculo para manejar esas instancias.

También puede considerar si el DATEDIFF debe ser totalmente inclusivo. Por ejemplo, ¿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

Descubrí que cuando usé esto había un problema cuando d1 cayó el sábado. A continuación se muestra lo que usé para corregir esto.

declare @d1 datetime, @d2 datetime
select @d1 = '11/19/2011' ,  @d2 = '11/28/2011'

select datediff(dd, @d1, @d2) +case when datepart(dw, @d1) = 7 then 1 else 0 end - (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

Puedes sustentar nuestra faena dejando un comentario y dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *