[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:
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:
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@nor






Excelente artículo ha sido muy esclarecedor.
Gracias por publicarlo me ha sido de gran utilidad.
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.
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.