Alternativas a DATEADD() en PostgreSQL
-
la función
DATEADD()
en SQL -
Utilice los operadores
+
y-
como alternativa aDATEADD()
en PostgreSQL -
Utilice el tipo de datos
INTERVALO
como alternativa aDATEADD()
en PostgreSQL
Este artículo analiza las alternativas a la función DATEADD()
en PostgreSQL.
la función DATEADD()
en SQL
Supongamos que tiene la fecha de fabricación de un producto guardada en su base de datos, junto con la cantidad de días que tarda en caducar. Esto lo podemos demostrar a través de la siguiente tabla:
Create table product
(
name varchar(30) not null,
manufacture_date date,
expires_in int,
constraint PK_PRODUCT primary key (name)
);
Ahora, completemos esta tabla con datos de muestra de un producto:
insert into product values ('Fruit Juice', '2022-08-24', 10);
Producción:
De estos datos, solo sabemos que el producto caduca en 10 días, pero no sabemos su fecha de caducidad exacta. ¿Hay alguna manera de que podamos calcularlo a partir de los datos dados?
En el servidor SQL, tenemos la función DATEADD()
, que nos ayuda a agregar intervalos de fechas a una fecha determinada. Por ejemplo, podemos ejecutar la siguiente consulta en el servidor SQL:
SELECT DATEADD(day, 1, '2022-08-26') as Next_Day;
Producción:
La salida arrojó resultados al agregar 1 día a la fecha especificada. De igual forma, la función DATEADD()
nos permite añadir otro tipo de intervalos de fechas, como meses y años.
Tener una función DATEADD()
es útil porque la suma y la resta de fechas no son tan sencillas como con los números. Debemos recordar que el valor del mes y del año debe incrementarse después de días específicos, y los días también deben reiniciarse desde 1 después de un tiempo.
Sin embargo, PostgreSQL no nos proporciona una función DATEADD()
similar a la del servidor SQL. Entonces, ¿cómo realizamos los cálculos de fechas esenciales en PostgreSQL?
Este artículo discutirá las alternativas a la función DATEADD()
en PostgreSQL.
Utilice los operadores +
y -
como alternativa a DATEADD()
en PostgreSQL
Una forma de hacer esto es usar los operadores +
y -
como lo haríamos para la suma y resta de enteros. Veamos cómo podemos sumar un cierto número de días a una fecha usando el operador +
.
SELECT date '2022-08-24' + 10 as Expiration_Date;
Esto generará la siguiente salida:
Podemos ver que se han agregado 10 días a la fecha especificada como se esperaba. Otra forma de escribir esta consulta es la siguiente y genera el mismo resultado:
SELECT date '2022-08-24' + integer ‘10’ as Expiration_Date;
Producción:
A continuación, veamos cómo podemos retroceder en el tiempo y restar un número determinado de días de una fecha usando los operadores +
y -
. La primera forma de hacerlo es usando un operador +
y dando un valor entero negativo, como se muestra a continuación:
SELECT date '2022-09-03' + -10 as Manufacture_Date;
O
SELECT date '2022-09-03' + integer ‘-10’ as Manufacture_Date;
La salida se muestra a continuación:
La segunda forma es utilizar el operador -
y especificar el número de días que queremos restar. Esto se hace de la siguiente manera:
SELECT date '2022-09-03' - 10 as Manufacture_Date;
O
SELECT date '2022-09-03' - integer ‘10’ as Manufacture_Date;
La salida se muestra a continuación:
Este método de usar los operadores +
y -
es útil cuando solo tiene que agregar un número específico de días.
¿Qué sucede si desea agregar 2 meses a la fecha? Siempre puede convertir los 2 meses en varios días y luego usar el operador +
para sumar, pero este es un proceso largo.
Alternativamente, podemos usar el tipo de datos INTERVALO
para agregar cualquier intervalo de fechas directamente. Este método se explica a continuación.
Utilice el tipo de datos INTERVALO
como alternativa a DATEADD()
en PostgreSQL
El tipo de datos INTERVALO
almacena días, meses, años, semanas y tiempo en horas, minutos y segundos. Ejecutando algunas consultas de muestra, demostremos cómo se usa cada una.
Intervalo de días
Se puede agregar un número específico de días a una fecha de la siguiente manera:
SELECT date '2022-08-24' + INTERVAL ‘10 day’ as Expiration_Date;
Esto da la siguiente salida:
Podemos ver que la salida se muestra como una marca de tiempo sin zona horaria. Esto se debe a que el tipo de datos INTERVALO
también se ocupa de los valores de tiempo, por lo que la fecha especificada en nuestra consulta se ha convertido para tener valores de fecha y hora como marca de tiempo.
Intervalo de meses
Se puede agregar un número específico de meses a una fecha de la siguiente manera:
SELECT date '2022-08-24' + INTERVAL ‘2 month’ as Expiration_Date;
Esto da la siguiente salida:
Intervalo de años
Se puede agregar un número específico de años a una fecha de la siguiente manera:
SELECT date '2022-08-24' + INTERVAL ‘1 year’ as Expiration_Date;
Esto da la siguiente salida:
Intervalo de semanas
Se puede agregar un número específico de semanas a una fecha de la siguiente manera:
SELECT date '2022-08-24' + INTERVAL ‘1 week’ as Expiration_Date;
Esto da la siguiente salida:
Intervalos de fechas múltiples
También podemos usar el tipo de datos INTERVALO
para agregar varios tipos de intervalos de fechas a la vez. A continuación se muestra un ejemplo:
SELECT date '2022-08-24' + INTERVAL ‘1 week 2 day’ as Expiration_Date;
Esto da la siguiente salida:
Nota: Además de estos, también podemos agregar intervalos de tiempo a una fecha utilizando el tipo de datos
INTERVALO
especificando las horas, minutos o segundos exactos para agregar.
Intervalos de fechas en variables
Un ejemplo al comienzo del artículo discutió el cálculo de la fecha de vencimiento a partir de un valor almacenado de la fecha de fabricación y la cantidad de días hasta el vencimiento. Veamos cómo podemos realizar cálculos en fechas utilizando valores almacenados en variables.
La sintaxis es la siguiente:
SELECT manufacture_date + expires_in * INTERVAL '1 day' as Expiration_Date FROM product;
En esta consulta, hemos convertido el valor almacenado en la variable expires_in
en un INTERVALO
que representa días. Esto da la siguiente salida:
Del mismo modo, también podemos convertir valores almacenados como números enteros en meses, años y semanas y realizar cálculos de fecha en ellos.
Esto resume nuestra discusión sobre las alternativas a la función DATEADD()
en PostgreSQL. ¡Seguir aprendiendo!
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub