<< Volver a Learning SQLTrabajando con fechas en SQL Server
- Suma y Resta de Fechas
Quizás te ha tocado trabajar con fechas durante el desarrollo de alguna aplicación, y has tenido que trabajar con estas de diferentes maneras, entre ellas la suma o resta de fechas quizás para control de días o meses, todo depende del uso que quieras darle.
A continuación presentaremos la función que te permite Sumar o Restar fechas, códigos de ejemplo y pantalla de resultados luego de utilizarlo.
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.
DATEADD
Estructura de Código:
DATEADD --> DATEADD(<parámetro>, <cantidad a sumar o restar>, <fecha a la cual se le sumara>)
Los parámetros no son más que el tipo de suma que se va a realizar entre los cuales están:
dd - Dias
mm o m - Mes
yy o yyy - Año
wk - Semana
hh - Horas
mi - Minutos
ss - Segundos
La cantidad a sumar o restar 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
Códigos de Ejemplo:
En nuestro ejemplo utilizaremos el parámetro: MM - Mes
SUMA: SELECT DATEADD(MM, 1, '2010-01-26') AS [FECHA]
**Sumamos un mes a la fecha indicada.
Recibiremos el siguiente 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:
**Próximamente publicaremos información acerca de la función CONVERT y sus diferentes usos.
SELECT CONVERT(varchar(10), (SELECT DATEADD(MM, 1, '2010-01-26')), 103) AS [Fecha]
Recibiremos el siguiente resultado:

Para este ejemplo utilizaremos el parámetro: DD - Día
RESTA: SELECT DATEADD(DD, -10, '2010-01-26') AS [FECHA RESTADA]
**Restamos 10 días a la fecha indicada.
Recibiremos el siguiente resultado:

Le damos formato: SELECT CONVERT(varchar(10), (SELECT DATEADD(DD, -10, '2010-01-26')), 103) AS [FECHA RESTADA]
Recibimos el siguiente resultado:

DATEDIFF
Estructura de Código:
DATEDIFF --> DATEDIFF(<parámetro>, <primera fecha>, <segunda fecha>)
Los parámetros indican en que nos basamos para la resta de fechas, entre estos estan:
dd - Dias
m- Mes
yy - Año
wk - Semana
hh - Horas
mi - Minutos
ss - Segundos
NOTA IMPORTANTE: El resultado se obtendrá de la siguiente operación: segunda fecha - primera fecha
**En caso de que el uso de DATEDIFF este orientado al control de tiempo restante para X labor, usted puede manejar
el control de dicho tiempo de la manera deseada, aún siendo la segunda fecha menor a la primera, lo cual traería
el resultado con signo negativo.
La fecha debe estar en un formato correcto utilizado por SQL para almacenamiento de fechas.
En nuestros ejemplos utilizaremos el siguiente: 2010-01-26
Códigos de Ejemplo:
En este primer ejemplo utilizaremos el parámetro: DAY - DIA
Usted puede utilizar el tipo de parámetro deseado, dependendo del uso que le dará.
RESTA: SELECT DATEDIFF(DAY, 2010-01-26, 2010-01-20) AS [DIAS RESTANTES]
Recibiremos el siguiente resultado:

En este segundo ejemplo utilizaremos el parámetro: M - MES
A la segunda fecha en este caso: '2010-04-01' se le restara la primera fecha: '2010-02-01', obteniendo como resultado el intervalo de meses que restan de ambas fechas, ya que utilizamos el parámetro M - MES
RESTA: SELECT DATEDIFF(MM, '2010-02-01', '2010-04-01') AS [MESES RESTANTES]
Recibiremos el siguiente resultado:

LISTO.
Conversión de Fechas
Quizá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:
Código | Formato |
|---|
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 | aammdd aaaammdd |
|---|
| 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:
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

RESULTADO 1.2
LISTO!
¿Esta información no responde a tu pregunta?
Dejanos saber tus dudas usando el siguiente formulario, responderemos tan rápido nos sea posible. Tu aporte es importante.