Diferencia entre fechas en SQL Server

En SQL Server  existe una función a la cual, pasándole dos fechas, devuelve la diferencia entre ellas. Esta función de diferencia entre fechas, se llama DATEDIFF y como peculiaridad entre otros motores de bases de datos, está que se puede definir la unidad de medida en la cual se devolverá el resultado (segundos, minutos, días, etc.).

Esta función sólo está disponible desde la versión SQL Server 2008. Si usas una versión anterior deberás buscar otra alternativa.

La sintaxis es la siguiente:

DATEDIFF ( unidad, fecha_desde, fecha_hasta )

Donde fecha_desde y fecha_hasta son las fechas a comparar y unidad puede tomar los siguientes valores, dependiendo de lo que nos interese, evitando la necesidad de tener que hacer conversiones luego:

  • year
  • quarter
  • month
  • dayofyear
  • day
  • week
  • hour
  • minute
  • second
  • millisecond
  • microsecond
  • nanosecond

Esta expresión, devuelve la diferencia entre fechas como un int, de manera que dependiendo de la unidad de medida que se seleccione, se puede perder precisión. Por ejemplo, si entre dos fechas hay 10 días de diferencia y se selecciona como unidad la semana (week), devolverá 1 semana, desestimándose el resto de días. Esto lo deberemos tener en cuenta para estimar si interesa esa pérdida de precisión o si en cambio es mejor sacar la diferencia en días para luego hacer la conversión en semanas con decimales.

Otra cosa a tener en cuenta es que al devolver la diferencia entre fechas en un int, éste tiene un rango de valores posibles. En SQL Server este rango va desde de -2.147.483.648 a +2.147.483.647 para el tipo int. Esto significa que, por ejemplo, para el caso de milisegundos el máximo será de 24 días, 20 horas, 31 minutos y 23,647 segundos o para el caso de segundos de 68 años.

Deja un comentario

Pin It on Pinterest