FUNCIONES DE FECHAS EN SQL

 FUNCIONES DE FECHAS EN SQL

 

En el siguiente artículo estaremos hablando de las funciones de fechas en SQL, ya que son muy importantes al momento de trabajar con campos donde tengamos que guardar registros que incluyan fechas.

En SQL podemos hacer uso de diferentes tipos de datos para el manejo de fechas, hay 4 que en principio son los más frecuentes que se utilizan (TIME, DATE, DATETIME, SMALLDATETIME) cada uno de ellos tiene un uso específico para el almacenamiento de formatos de fechas.

 A continuación, vamos a mencionar las funciones de fechas más importantes: 

 

  1. GETDATE (): nos permite mostrar la fecha y hora actual.
  2. DATEPART (): esta función nos devuelve una parte de la fecha y hora.

  3. DATEADD (): con esta función podemos sumar o restar intervalos de tiempos a partir de una fecha especificada.

  4. DATEDIFF (): devuelve un tiempo específico entre 2 fecha.


Índice




USO DE GETDATE ()

La función Getdate () nos permite mostrar la fecha y hora actual dentro de un bloque de transacciones establecidos en una zona horaria de la sesión actual.

Getdate() es una función no determinista es decir que siempre nos va a mostrar un valor diferente. También las vistas y expresiones que hacen referencia hacia esta función dentro de una columna no pueden indexarse.


Ejemplos de GETDATE en SQL Server

GETDATE () podemos utilizarlo en sentencias SELECT para obtener la fecha actual sql, también podemos usarlos para insertar registros (INSERT INTO) en una tabla, de igual manera podemos actualizar (UPDATE)los registros de la tabla involucrada y por último podemos eliminar (DELETE) registros actuales de una tabla.

Para el primer ejemplo vamos a hacer uso de una tabla llamada “Autos esta tabla no contiene un campo de fecha, pero se lo vamos a agregar e insertar registros de fechas para llevar a cabo el ejemplo.

En la tabla autos ya tenemos un campo llamado año que hacer referencia a que año pertenece el vehículo, pero nosotros vamos a agregarle una columna que contenga la fecha en que salió ala venta ese vehículo para eso vamos a utilizar la instrucción ALTER para agregar la nueva columna veamos:

ALTER TABLE Autos ADD FechaEstreno DATETIME 

Ya hemos agregado la nueva columna, si realizamos un select ala tabla Autos podremos ver el campo nuevo, pero este se encuentra vacío.

A continuación vamos a realizar una inserción de registros para que podamos ver el uso de GETDATE() utilizando  Insert Into.

 INSERT INTO Autos (Codigo,Nombre,Marca,AÑO,FechaEstreno)
 VALUES(7,'CHIRON SUPER SPORT','BUGATTI',2020,GETDATE()) 

Hemos procedido a insertar un nuevo registro a la tabla autos si observamos para la columna fecha de estreno hemos hecho uso de la función GETDATE() al hacer esto la fecha guardada en la tabla será la fecha y hora actual del sistema :



Ahora supongamos que deseamos actualizar la fecha de estrenos de los autos a la fecha y hora actual para eso vamos a realizar la siguiente consulta:

 UPDATE Autos
 SET
  FechaEstreno = GETDATE()
 WHERE NOT Codigo = 7

Como podemos ver hemos mandado a actualizar todo los registros de la tabla pero con la excepción del codigo de auto numero 7 ya que ese fue el que insertamos a la tabla :


Ya hemos visto el uso de GETDATE()  para insertar y actualizar registros pero también como mencionamos al inicio podemos utilizar esta función para mostrar registros de la fecha actual sql mediante una consulta Select veamos

Seleccionemos todo los nombre de vehículos cuya fecha de estreno sea hoy

  SELECT Nombre,FechaEstreno 
  FROM Autos where FechaEstreno = GETDATE() 

Si nosotros ejecutamos ésa consulta vamos a observar que el resultado nos devolverá que no hay registros en la tabla.

Va ahora les explico al inicio mencionamos que GETDATE () es una función determinista es decir solo nos va a mostrar los registros que coincidan con la misma fecha y en la misma hora en curso, pero se preguntaran está transcurriendo la fecha actual, claro que sí pero debemos saber también que la hora va en curso y va cambiando entonces ahí es el punto del porque no nos va a mostrar los registros. Para que podamos mostrar los registros de la fecha actual tenemos que hacer uso de otra función que nos va permitir poder ver los registros de la  fecha actual y esa función es CONVERT la cual nos permite mostrar la fecha en otro tipo de formatos.

Entonces para poder mostrar la fecha actual vamos a modificar la consulta que ya hemos hecho pero le agregaremos Convert para convertir nuestro tipo de dato Datetime a Date.

  SELECT Nombre,FechaEstreno
  FROM Autos where FechaEstreno = convert(date,GETDATE()) 

Si procedemos a ejecutar la consulta nuevamente ahora si podremos ver los registros seleccionados:


También podemos utilizar la función GETDATE() para eliminar registros de una tabla pero ojo hay que tener cuidado al realizar un DELETE  ya que podríamos borrar todos los registros de la tabla sino aplicamos un filtro adecuado para ello.

DATEPART() nos permite devolver una parte de una fecha y los devuelve como un valor entero.

Sintaxis
DATEPART(Intervalo, ValorFecha) From NombreTabla  

A continuación, vamos a realizar unos ejemplos utilizando DATEPART(), como ya sabemos con esta función podemos obtener una parte de una fecha específica en este caso vamos a ver algunos ejemplos donde vamos a recuperar el año, el mes incluso el día del campo fecha de la tabla compras.


Ejemplos de DATEPART en SQL Server

De la tabla compras en su campo fecha mostremos en que años, mes y día se elaboraron dichas compras para eso vamos a generar la siguiente consulta.

 SELECT DATEPART(YEAR,fecha)as Año,DATEPART(MONTH,fecha) as mes,DATEPART(DAY,fecha) as Dia 
  FROM ScpCompra 

Con la siguiente consulta lo que hacemos es usar DATEPART y extraer del campo fecha la porción del año, mes y día en una misma consulta ejecutemos la consulta y veamos el resultado obtenido:


Después de haber ejecutado la consulta podemos ver que esta nos divide en campo fecha en porciones en la primera columna vemos el año en la siguiente columna vemos el mes de elaboración y por último en qué día se realizó la compra.

También con DATEPART() podemos obtener otros registros de fechas como por ejemplo si deseamos obtener la cantidad de días en curso a partir de la fecha en que estamos, para eso vamos a crear la siguiente consulta

 DECLARE @fecha AS DATETIME
  SET  @fecha = GETDATE()

  SELECT DATEPART(dy, @fecha) AS DIAS_TRANSCURRIDOS 

Ejecutemos la consulta para obtener el resultado de los días en curso:


Si observamos el resultado obtenido son 89 días lo que nos indica que casi son 3 meses transcurridos del año. Ahora veamos otro ejemplo.

En el siguiente ejemplo obtengamos el número de semanas transcurridas a partir de la fecha actual, veamos la consulta que nos mostrará esos dato.


 DECLARE @fecha AS DATETIME
  SET  @fecha = GETDATE()

  SELECT DATEPART(WEEK, @fecha) AS SEMANAS_EN_CURSO 
Si ejecutamos la consulta podemos observar que nos va a mostrar que han transcurrido 14 semanas a partir de la fecha actual.

Realicemos un último ejemplo con DATEPART(), obtengamos la cantidad de meses del año que han transcurrido, veamos la consulta.

  DECLARE @fecha AS DATETIME
  SET  @fecha = GETDATE()
  
  SELECT DATEPART(MONTH,@fecha) AS MESES_TRANSCURRIDOS
Al ejecutar la consulta vamos a obtener los meses en curso a partir de una fecha determinada. Es importante familiarizarnos con DATEPART() ya que nos va ayudar a resolver consultas que muchas veces son necesarias para cualquier tipo de reporte que involucre este tipo de filtros en fechas.


USO DE DATEADD()

La función DATEADD() nos permite poder sumar o restar intervalos de tiempos a partir de una fecha especificada.

Sintaxis
DATEADD(INTERVALO_TIEMPO,NUMEROS,FECHADESIGNADA) 

Explicando rápidamente  la sintaxis:

 El intervalo de tiempo: se refiere si vamos agregar meses, días , horas, años a una fecha.

Números: hace referencia a la cantidad de días, mese, horas que vamos agregarle a la fecha.


Ejemplos de DATEADD en SQL Server

A continuación vamos a mostrar algunos ejemplos del uso de DATEADD().

Supongamos que deseamos agregarle 2 meses ala fecha actual, para eso vamos a crear la siguiente consulta.
SELECT DATEADD(MONTH,2,GETDATE()) AS NUEVAFECHA

Si observamos la consulta nos va a mostrar una nueva fecha ya que le hemos sumado 2 meses por lo cual la nueva fecha es el 30 de mayo del 2022.

para el siguiente ejemplo supongamos que necesitamos sumar 1 año a partir de la fecha actual, veamos el ejemplo.

SELECT DATEADD(YEAR, 1 ,GETDATE()) AS NUEVOAÑO 

Ejecutemos la consulta para obtener el resultado:

Si observamos hemos sumaos 1 año a partir de la fecha actual. Con DATEPART() como explicábamos podemos sumarle días, meses y años, horas  a una fecha. Pero de igual manera podemos restarle  a una fecha según la consulta lo amerite, veamos un ejemplo restando 2 meses y días a una fecha, la consulta para eso será la siguiente:

  DECLARE @fecha AS DATETIME
  SET  @fecha = GETDATE()

   SELECT DATEADD(MONTH, -2,@fecha) AS FECHA,DATEADD(DAY,-5,@fecha) AS DIAS 

Vamos a ejecutar la siguiente consulta en la cual vamos a restarle ala fecha actual 2 meses y también le restaremos 5 días:

USO DE DATEDIFF()


La función DATEDIFF() nos permite obtener la diferencia entre años, meses, días, horas, minutos, segundos etc., entre 2 fechas.

la sintaxis para usa DATEDIFF es la siguiente:
DATEDIFF( Intervalo , FechaInicio , FechaFin) 

Ahora vamos a explicar los argumentos de la sitaxis de DATEDIFF()

Intervalo: esta nos indica la fecha la cual puede ser el año, mes, semanas o días.

FechaInicio : indica la fecha de donde vamos a iniciar el calculo.

FechaFin: Indica el final de la fecha hasta donde vamos a realizar el calculo de fecha.


Ejemplos de DATEDIFF en SQL Server

A continuación vamos a mostrar algunos ejemplos del uso de DATEDIFF().

Vamos a mostrar la diferencia de fechas en varias parte de fechas por ejemplo para mostrar la cantidad de años entre 2 fechas o la cantidad de días entre 2 fechas, veamos la consulta que vamos a crear:

DECLARE @FECHA_INICIO AS DATETIME
       ,@FECHA_FIN AS DATETIME

	SET @FECHA_INICIO = '30/10/2018'
	SET @FECHA_FIN = '30/03/2022'

	SELECT DATEDIFF(YEAR,@FECHA_INICIO,@FECHA_FIN) AS AÑOS
	SELECT DATEDIFF(MONTH,@FECHA_INICIO,@FECHA_FIN) AS MESES
	SELECT DATEDIFF(DAY,@FECHA_INICIO,@FECHA_FIN) AS DIAS
	SELECT DATEDIFF(QUARTER,@FECHA_INICIO,@FECHA_FIN) AS TRIMESTRE
	SELECT DATEDIFF(WEEK,@FECHA_INICIO,@FECHA_FIN) AS SEMANAS 

Si ejecutamos esta consulta vamos  a obtener el calculo realizado entre 2 rangos de fechas establecidos:


Ahora veamos un ejemplo aplicando DATEDIFF a los registros de una tabla donde se registra el movimiento del inventario, para esta consulta vamos a comparar la fecha de entrada del producto y la fecha de salida y que nos muestre si el pedido fue facturado la consulta es la siguiente:

SELECT SI.ID,SP.NombreProducto, SI.Fecha, CASE
        WHEN DATEDIFF(day, SI.Fecha, SI.Fecha) <0 acturacion="" as="" by="" else="" end="" from="" inner="" is="" join="" movimiento="" not="" null="" ompra="" on="" order="" pre="" si.fecha="" si.objproductoid="SP.ProductoID" si="" sivproductoinventario="" sivproductos="" sp="" then="" where="">

Ejecutemos la consulta y veamos el resultado obtenido:



En este articulo hemos aprendido como utilizar la funciones de fechas en SQL Server. las funciones de fechas son muy importantes al momento de crear consultas donde se involucran campos de fechas.



Publicar un comentario

0 Comentarios