[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 | #1

    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 | #2

    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 | #3

      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.

  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.