Home
Contacto

<< 
Volver a Learning SQL

Trabajando con fechas en SQL Server


          1.  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.


* First name (required):

* Last name (required):
* E-mail address (required):

Phone number:
* Message (required):