Alternativas a DATEADD() en PostgreSQL

Bilal Shahid 15 febrero 2024
  1. la función DATEADD() en SQL
  2. Utilice los operadores + y - como alternativa a DATEADD() en PostgreSQL
  3. Utilice el tipo de datos INTERVALO como alternativa a DATEADD() en PostgreSQL
Alternativas a DATEADD() 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:

PostgreSQL DATEADD - Salida 1

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:

PostgreSQL DATEADD - Salida 2

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:

PostgreSQL DATEADD - Salida 3

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:

PostgreSQL DATEADD - Salida 4

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:

PostgreSQL DATEADD - Salida 5

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:

PostgreSQL DATEADD - Salida 6

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:

PostgreSQL DATEADD - Salida 7

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:

PostgreSQL DATEADD - Salida 8

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:

PostgreSQL DATEADD - Salida 9

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:

PostgreSQL DATEADD - Salida 10

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:

PostgreSQL DATEADD - Salida 11

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:

PostgreSQL DATEADD - Salida 12

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!

Bilal Shahid avatar Bilal Shahid avatar

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

Artículo relacionado - PostgreSQL Date