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:
- GETDATE (): nos permite mostrar la fecha y hora actual.
DATEPART (): esta función nos devuelve una parte de la fecha y hora.
DATEADD (): con esta función podemos sumar o restar intervalos de tiempos a partir de una fecha especificada.
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
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(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:
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
DECLARE @fecha AS DATETIME
SET @fecha = GETDATE()
SELECT DATEPART(MONTH,@fecha) AS MESES_TRANSCURRIDOS
USO DE DATEADD()
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
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()
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="">0>
Ejecutemos la consulta y veamos el resultado obtenido:
0 Comentarios