Open In App

DATEADD() Function in PostgreSQL

Last Updated : 11 Oct, 2024
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Share
Report
News Follow

PostgreSQL is a powerful, open-source relational database system known for its strength and wide range of functionalities. DATEADD function in PostgreSQL adds or subtract time intervals from a given date.

In this article, we will discuss basic usage, advanced interval types, and practical examples for the DATEADD() function in PostgreSQL giving us a better understanding of working with date and time intervals.

DATEADD() Function in PostgreSQL

It provides flexible and natural ways to add or subtract intervals from dates using standard SQL functions and operators. PostgreSQL doesn’t have a direct DATEADD() function, but it provides a wide range of functionalities to perform date and time arithmetic in a very flexible manner using intervals and operators.

Syntax:

DATEADD (datepart, number, date)

key terms:

  • datepart: The part of the date you want to add (e.g., year, month, day, hour, minute, second).
  • number: The number of intervals to add (can be positive or negative).
  • date: The date from which the interval will be added.

1. Date and Time Arithmetic in PostgreSQL

PostgreSQL doesn’t have a direct DATEADD() function, but it provides a wide range of functionalities to perform date and time arithmetic in a very flexible manner using intervals and operators. The basic method to add or subtract intervals in PostgreSQL is to use the + or - operators with intervals.

1. Adding Intervals to Dates in PostgreSQL

We can add time intervals to a date in PostgreSQL using the following syntax. This query adds 10 days to 2024-10-01 and returns 2024-10-11.

Query:

date + interval 'number unit'

key terms:

  • number: The amount of time to add (can be positive or negative).
  • unit: The unit of time (e.g., days, months, years, hours, minutes, seconds).

2. Example of Adding Days

In this query, we add 10 days to the date 2024-10-01. The result is 2024-10-11, demonstrating how easily PostgreSQL allows date arithmetic with intervals.

Query:

SELECT '2024-10-01'::date + interval '10 days' AS new_date;

Output:

new_date
2024-10-11

3. Example of Adding Months

Here, we add 2 months to the date 2024-10-01. The output is 2024-12-01, showing how the interval function can be used to navigate through months while considering the correct date progression.

Query:

SELECT '2024-10-01'::date + interval '2 months' AS new_date;

Output:

new_date
2024-12-01

4. Example of Adding Years

In this example, we add 5 years to 2024-10-01, resulting in 2029-10-01. This illustrates how PostgreSQL effectively manages longer time intervals, maintaining the original date structure while advancing the year.

Query:

SELECT '2024-10-01'::date + interval '5 years' AS new_date;

Output:

new_date
2029-10-01

2. Subtracting Intervals from Dates

In PostgreSQL, subtracting an interval works the same way as adding it, but we simply use the - operator instead of + operator.

Example of Subtracting Days

In this query, we subtract 10 days from the date 2024-10-01. The result is 2024-09-21, demonstrating how PostgreSQL allows us to easily manipulate dates by removing specified time intervals.

Query:

SELECT '2024-10-01'::date - interval '10 days' AS new_date;

Output:

new_date
2024-09-21

Example of Subtracting Months

Here, we subtract 3 months from 2024-10-01, resulting in 2024-07-01. This shows how PostgreSQL handles date arithmetic by moving backward in time through months while maintaining the integrity of the original date format.

Query:

SELECT '2024-10-01'::date - interval '3 months' AS new_date;

Output:

new_date
2024-07-01

3. Using INTERVAL Data Type in PostgreSQL

The INTERVAL data type in PostgreSQL is very powerful and can represent various units of time. We can specify intervals in terms of years, months, days, hours, minutes, and seconds. Here are some examples:

Example of Adding an Interval with Complex Units

In this example, we add a complex interval of 1 year, 2 months, and 5 days to the date 2024-10-01. The result is 2025-12-06. This shows PostgreSQL's capability to handle multiple time units in a single interval, allowing for precise date manipulation.

Query:

SELECT '2024-10-01'::date + interval '1 year 2 months 5 days' AS new_date;

Output:

new_date
2025-12-06

Example of Adding Hours and Minutes:

In this query, we add 5 hours and 30 minutes to the timestamp 2024-10-01 10:00:00, resulting in 2024-10-01 15:30:00. This shows how PostgreSQL allows for adding time intervals not only to dates but also to timestamps, providing flexibility in time-based calculations.

Query:

SELECT '2024-10-01 10:00:00'::timestamp + interval '5 hours 30 minutes' AS new_time;

Output:

new_time
2024-10-01 15:30:00

4. Working with Time Zones and Intervals

In PostgreSQL, we can also work with time zones. When adding intervals, we should take into account the time zone if the data includes time zone-aware timestamps. We can use the AT TIME ZONE clause to handle this.

Example of Adding Hours to a Timestamp with Time Zone

In this example, we add 5 hours to the timestamp 2024-10-01 10:00:00 with a time zone of +00. The resulting timestamp is 2024-10-01 15:00:00+00. This illustrates how PostgreSQL handles timestamps with time zones, ensuring that the addition of time intervals is consistent with the specified time zone.

Query:

SELECT '2024-10-01 10:00:00+00'::timestamptz + interval '5 hours' AS new_time;

Output:

new_time
2024-10-01 15:00:00+00

5. Using DATE_TRUNC() and Intervals Together

PostgreSQL provides the DATE_TRUNC() function, which can be combined with intervals to round dates to the nearest unit (e.g., hour, day, month, etc.). we use the DATE_TRUNC() function for rounding to the Nearest Month.

Rounding to the Nearest Month

In this example, we use the DATE_TRUNC() function to round the date 2024-10-15 to the start of the month, which is 2024-10-01. Then, we add one month to this truncated date, resulting in 2024-11-01.

Query:

SELECT DATE_TRUNC('month', '2024-10-15'::date) + interval '1 month' AS new_date;

Output:

new_date
2024-11-01

6. Using EXTRACT() Function to Add Time Intervals

The EXTRACT() function in PostgreSQL is useful when we need to extract parts of a date (such as year, month, day) and add them back to a timestamp. It can also be used in combination with intervals to manipulate timestamps.

Example: Adding Extracted Time Intervals

In this example, the EXTRACT() function retrieves the number of days from the interval '5 days', which returns 5. This value is then multiplied by the interval '1 day' to create a time interval of 5 days. By adding this interval to the initial date 2024-10-01, the result is 2024-10-06

Query:

SELECT '2024-10-01'::date + (EXTRACT(day FROM interval '5 days') * interval '1 day') AS new_date;

Output:

new_date
2024-10-06

7. Using the AGE() Function with Intervals

PostgreSQL provides the AGE() function, which can be used to calculate the difference between two dates or timestamps. This is useful when working with intervals, especially when calculating the difference between the current date and a past event.

Calculating Age Difference

This functionality is particularly useful for applications involving age calculation or assessing durations in a user-friendly format. This query calculates the age difference between 1990-05-15 and 2024-10-01, resulting in 34 years 4 months.

Query:

SELECT AGE('2024-10-01'::date, '1990-05-15'::date);

Output:

age
34 years 4 mons

Explanation:

In this example, the AGE() function calculates the time difference between October 1, 2024, and May 15, 1990. The result of 34 years 4 months indicates that there is a span of 34 years and 4 months between these two dates

Conclusion

Although PostgreSQL does not have a DATEADD() function like SQL Server, it provides powerful alternatives for date and time arithmetic using intervals. Additionally, PostgreSQL’s flexible INTERVAL data type allows us to specify complex time durations and perform advanced date arithmetic with ease.


Next Article
Article Tags :

Similar Reads

three90RightbarBannerImg