[SQL] Restando Fechas

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: ,,,
  1. noviembre 26, 2009 a las 9:48 am

    Excelente artículo ha sido muy esclarecedor.

    Gracias por publicarlo me ha sido de gran utilidad.

  2. Axel
    marzo 15, 2010 a las 2:23 am

    puedo hacer una columna en la que se almacene el numero de dias de diferencia que hay entre una fecha que se define cuando se ingresan los datos y la fecha del sistema. como ej. jhon smith nacio en 01/01/2010

    Nombre Nacimiento Fecha del sistema Dias vividos
    Jhon 01/01/2010 10/01/2010 10

    Como lo tendria que hacer. de ante mano Gracias.

    • marzo 16, 2010 a las 3:21 pm

      que onda Axel,
      de que puedes hacerlo, lo puedes hacer no es recomendable pero siempre se puede, de hecho este ejemplo muestra como encontrar la diferencia entre unas fechas, pero lo recomendable es que esto lo hagas desde .net y no desde la base de datos.
      Saludos.

  3. AJD
    agosto 21, 2012 a las 10:00 pm

    Fue de mucha ayuda en verdad Gracias!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: