[SQL] Restando Fechas

7 02 2009

Este post es en respuesta a una pregunta de un lector de blog, que necesita restar una fecha. Esto es más sencillo de lo que parece, vamos a trabajar con un SQL, si necesitas ponerlo en un Gridview solo haces la consulta o el SP y listo.

Lo primero es saber que tipo de formato vamos a usar ya que desde SQL Server 2005 cuando trabajamos con fechas tenemos muchas opciones, por ejemplo si ejecutamos la siguiente instrucción T-SQL

SELECT GETDATE() as Fecha_1,
CONVERT(VARCHAR(12),GETDATE(),100) as Fecha_2,
CONVERT(VARCHAR(12),GETDATE(),113) as Fecha_3,
CONVERT(VARCHAR(12),GETDATE(),102) as Fecha_4,
CONVERT(VARCHAR(12),GETDATE(),103) as Fecha_5,
CONVERT(VARCHAR(12),GETDATE(),106) as Fecha_6

Tenemos como resultado lo siguiente:

image

Como pueden observar los formatos son diferentes y aquí es donde podemos elegir el cumpla mejor nuestras expectativas. Ahora vamos a ver como restamos unas fechas

Para esto solo vamos a usar la funcion DATEDIFF  que devuelve un entero de los límites datepart que se han cruzado entre los valores startdate y enddate especificados.

Una forma de hacer esto es:

select
datediff(dd, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Dias

Que nos muestra la diferencia en días que en este caso es 202, para obtener mes, día y año solo agregamos un par de datediff más y listo. Algo como esto:

select
datediff(dd, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Dias,
datediff(mm, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Mes,
datediff(yy, (CAST('20080720' AS DATETIME)),(CONVERT(VARCHAR(12),GETDATE(),112))) as Año

Que nos arroja como resultado lo siguiente:

image

Entonces de esta manera obtenemos la diferencia entre las fecha inicial y la fecha final, y dependiendo de esto podemos convertir el resultado en un DateTime de nuevo o en un Varchar o el tipo de dato que mejor les parezca para su aplicación.

Espero que esto les ayude y les sirva, si necesitan obtener la diferencia en Horas, Minutos, etc, aquí les dejo una tabla con las abreviaturas correspondientes.

  • Parte de la fecha
  • Abreviaturas
  • año
  • yy, yyyy
  • trimestre
  • tt, t
  • mes
  • mm, m 
  • dia del año
  • da, a 
  • dia
  • dd, d 
  • semana
  • sm, ss 
  • hora
  • Hs
  • minuto
  • mi, n
  • segundo
  • ss, s 
  • milisegundo
  • Ms

@nor

Etiquetas de Technorati: ,,,