Download - Suma y Resta de Fechas

Transcript
Page 1: Suma y Resta de Fechas

Suma y Resta de Fechas [SQL Server]Existen ocasiones en las que es necesario Sumar y Restar fechas, así como buscar la

diferencia que existe entre una fecha y otra, refiriendonos a un rango. En este artículo mostraremos como hacer esto utilizando Microsoft SQL Server.

DATEADD: Es la función utilizada para la Suma y Resta de fechas en SQL Server

DATEDIFF: Es la función utilizada para obtener el intervalo de tiempo entre dos fechas.

EJEMPLOS CON: DATEADD

Sintaxis:

DATEADD (<parámetro>, <cantidad a sumar>, <fecha a la cual se le sumara>)

Lista de posibles parámetros:

Parámetro

Descripción

dd Días

mm o m Mes

yy o yyyy Año

wk Semana

hh Horas

mi Minutos

ss Segundos

Page 2: Suma y Resta de Fechas

La cantidad a sumar trabaja en base al parámetro indicado.

La fecha debe estar en un formato correcto utilizado por SQL para almacenamiento de fechas.

En nuestros ejemplos utilizaremos el siguiente: 2010-01-26

Ejemplos :

Sumar 1 mes a la fecha indicada. En nuestro ejemplo utilizaremos el parámetro: MM - Mes

SELECT DATEADD(MM, 1, '2010-01-26') AS [FECHA]

Resultado:

Podemos notar que se sumo un mes a la fecha indicada.

Si queremos obtener la fecha en formato DD/MM/AAAA , solo tenemos que transformar nuestro código y obtendremos un resultado más

familiar. Lo hacemos de la manera siguiente:

**Para ver información acerca de formatos de fechas favor ver artículo [ Formatos de Fecha [SQL Server] ]

SELECT CONVERT(varchar(10), (SELECT DATEADD(MM, 1, '2010-01-26')), 103) AS [Fecha]

Resultado:

Cabe destacar que utilizando DATEADD podemos trabajar inverso en sentido de Restar en lugar de Sumar, simplemente tenemos que poner

con signo negativo la cantidad y obtendremos el resultado restado.Ejemplo:

Restamos 10 días a la fecha indicada. Para este ejemplo utilizaremos el parámetro: DD - Día

SELECT DATEADD(DD, -10, '2010-01-26') AS [FECHA RESTADA]

Resultado:

Page 3: Suma y Resta de Fechas

Le damos formato: SELECT CONVERT(varchar(10), (SELECT DATEADD(DD, -10, '2010-01-26')), 103) AS

[FECHA RESTADA]

Resultado:

DATEDIFF

Sintaxis:

DATEDIFF(<parámetro>, <primera fecha>, <segunda fecha>)

Los parámetros indican qué queremos obtener como resultado de la diferencia entre 2 fechas (días, semanas, meses, etc), los mismos son indicados en la

siguiente tabla:

Parámetro

Descripción

dd Días

mm o m Mes

yy o yyyy Año

wk Semana

hh Horas

mi Minutos

Page 4: Suma y Resta de Fechas

ss Segundos

Nota: El resultado se obtendrá de la siguiente operación: segunda fecha - primera fecha

La fecha debe estar en un formato correcto utilizado por SQL para almacenamiento de fechas.

En nuestros ejemplos utilizaremos el siguiente: 2010-01-26

Ejemplos:

1. Buscamos la diferencia de días existente entre dos fechas. En este ejemplo utilizaremos el parámetro: DAY - DIA

SELECT DATEDIFF(DAY, 2010-01-26, 2010-01-20) AS [DIFERENCIA DIAS]

Resultado:

2. Buscamos la diferencia de meses que existe entre dos fechas. En este ejemplo utilizaremos el parámetro: M - MES

SELECT DATEDIFF(MM, '2010-02-01', '2010-04-01') AS [MESES RESTANTES]

Resultado:

Conversión de FechasQuizás muchos han tenido el inconveniente de que tienen fechas en formatos que no

van acorde con el reporte que tenemos que generar o quizás muchos se han preguntado cómo se podría alterar el formato que trae una fecha cuando grabamos en SQL Server con el tipo de dato “date”, por esta razón publicamos esta información que podría ser de mucha utilidad para la generación de reportes con formatos reconocidos

y más legibles.

Aquí mostramos una tabla que contiene los formatos en que podemos converti una fecha utilizando la función CONVERT:

Page 5: Suma y Resta de Fechas

Código Formato

Page 6: Suma y Resta de Fechas

100 (1, 2) mes dd aaaa hh:mia.m. (o p. m.)

101 mm/dd/aaaa

102 aa.mm.dd

103 dd/mm/aaaa

104 dd.mm.aa

105 dd-mm-aa

106 (1) dd mes aa

107 (1) Mes dd, aa

108 hh:mi:ss

9 ó 109 (1, 2)

mes dd aaaa hh:mi:ss:mmma.m. (o p. m.)

110 mm-dd-aa

111 aa/mm/dd

112 aammddaaaammdd

13 ó 113 (1, 2)

dd mes aaaa hh:mi:ss:mmm(24h)

114 hh:mi:ss:mmm(24h)

20 ó 120 (2) aaaa-mm-dd hh:mi:ss(24h)

21 ó 121 (2) aaaa-mm-dd hh:mi:ss.mmm(24h)

126 (4) aaaa-mm-ddThh:mi:ss.mmm (sin espacios)

127 (6, 7) aaaa-mm-ddThh:mi:ss.mmmZ

130 (1, 2) dd mes aaaa hh:mi:ss:mmma.m.

131 N/A

Como podemos visualiza existen muchos formatos disponibles para fechas, pero explicaremos como podemos aplicar cada uno de ellos para obtener el formato deseado en

nuestros reportes y/o consultas.

EJJEMPLOS:

Page 7: Suma y Resta de Fechas

Varios usos que podríamos dar con una simple consulta en fecha GETDATE()

SELECT CONVERT(VARCHAR (30), GETDATE(), 103) FECHA_FORMATO_103; SELECT CONVERT(VARCHAR (30), GETDATE(), 105) FECHA_FORMATO_105;SELECT CONVERT(VARCHAR (30), GETDATE(), 106) FECHA_FORMATO_106;

SELECT CONVERT(VARCHAR (100), GETDATE(), 107) FECHA_FORMATO_107;SELECT CONVERT(VARCHAR (30), GETDATE(), 110) FECHA_FORMATO_110;SELECT CONVERT(VARCHAR (30), GETDATE(), 111) FECHA_FORMATO_111;

RESULTADO: En este la imagen del RESULTADO 1.1 podemos visualizar lo consultado anteriormente,

donde cada fecha tiene su respectivo formato como indica la tabla.

RESULTADO 1.1

OTRAS FORMAS:

Podemos variar en la forma de obtener el dato que queremos convertir, entonces para esto haremos unas prácticas utilizando datos de fechas que estan ubicados en una

tabla y a partir de este haremos las conversiones requeridas.QUERY:

SELECT CONVERT(VARCHAR (10), <campo>, 103) FROM <tabla>En un ejemplo realizado recibimos el dato mostrado en la imagen RESULTADO 1.2

Query hecho: SELECT CONVERT(VARCHAR (10), (fecha), 103)FECHA_FORMATO_103 FROM

documentosVentaR

Page 8: Suma y Resta de Fechas

RESULTADO 1.2