Sling Academy
Home/PostgreSQL/How to use math operators with dates in PostgreSQL

How to use math operators with dates in PostgreSQL

Last updated: January 05, 2024

Introduction

Working with dates in PostgreSQL often requires precise calculations. Understanding how to use math operators with dates is essential for manipulating and querying temporal data effectively.

Adding and Subtracting with Dates

PostgreSQL allows you to add and subtract integers from dates, which affects the day component of the date. For example:

SELECT '2023-01-01'::date + 5;
-- Result: '2023-01-06'

SELECT '2023-01-01'::date - 5;
-- Result: '2022-12-27'

Subtracting one date from another gives you the difference in days:

SELECT '2023-01-06'::date - '2023-01-01'::date;
-- Result: 5

Working with Intervals

To add or subtract other time units, you can use intervals:

SELECT '2023-01-01'::date + INTERVAL '1 month';
-- Result: '2023-02-01'

SELECT '2023-01-01'::timestamp - INTERVAL '1 hour';
-- Result: '2022-12-31 23:00:00'

You can also perform operations on intervals themselves:

SELECT INTERVAL '1 day' * 2;
-- Result: '2 days'

SELECT INTERVAL '1 week' / 2;
-- Result: '3 days 12 hours'

Interval Functions and Operators

PostgreSQL provides functions such as date_trunc to round off time units and age to calculate differences between timestamps showing years, months, and days:

SELECT date_trunc('month', '2023-01-15'::date);
-- Result: '2023-01-01 00:00:00'

SELECT age('2023-01-01'::timestamp, '1980-06-18'::timestamp);
-- Result: '42 years 6 months 14 days'

Date and Time Functions

There are also functions that directly add or subtract time parts from dates and timestamps:

SELECT '2023-01-01'::date + 1 * INTERVAL '1 year';
-- Result: '2024-01-01'
SELECT '2023-01-01'::timestamp - 2 * INTERVAL '30 minutes';
-- Result: '2022-12-31 23:00:00'

These operations can be particularly useful for generating series, handling scheduling, and many other applications.

Extracting and Manipulating Date Parts

You can also extract specific parts of a date or timestamp and perform operations on them:

SELECT EXTRACT(YEAR FROM '2023-01-01'::date);
-- Result: 2023

SELECT (EXTRACT(MONTH FROM NOW()) + 1) % 12;
-- Result: The next month number

Advanced Date Operations

For more complex date operations, functions such as make_date create dates from year, month, and day numbers:

SELECT make_date(2023, 1, 1) + 1;
-- Result: '2023-01-02'

And window functions can combine date operations with analytics:

SELECT
	sale_date,
	sum(sales) OVER (ORDER BY sale_date RANGE BETWEEN INTERVAL '1 day' PRECEDING AND CURRENT ROW) AS running_total
FROM sales_records;

Time Zones and Date Arithmetic

When working with different time zones, AT TIME ZONE can be used with arithmetic operations to ensure accurate calculations:

SELECT ('2023-01-01 12:00:00'::timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'America/New_York';
-- Result: '2023-01-01 07:00:00-05'

Error Handling with Dates

Always be cautious of potential errors in date arithmetic, such as leap years and daylight saving adjustments. PostgreSQL will handle standard cases, but custom logic may need additional considerations.

Conclusion

Math operators and functions in PostgreSQL offer flexible and powerful tools for working with dates and times. With practice and careful consideration, you’ll be able to manipulate and unlock the full potential of temporal data in your database systems.

Next Article: Using OVERLAPS operator with dates in PostgreSQL

Previous Article: Explore Date Value Extractors in PostgreSQL

Series: PostgreSQL Tutorials: From Basic to Advanced

PostgreSQL

You May Also Like

  • PostgreSQL with TimescaleDB: Querying Time-Series Data with SQL
  • PostgreSQL Full-Text Search with Boolean Operators
  • Filtering Stop Words in PostgreSQL Full-Text Search
  • PostgreSQL command-line cheat sheet
  • How to Perform Efficient Rolling Aggregations with TimescaleDB
  • PostgreSQL with TimescaleDB: Migrating from Traditional Relational Models
  • Best Practices for Maintaining PostgreSQL and TimescaleDB Databases
  • PostgreSQL with TimescaleDB: Building a High-Performance Analytics Engine
  • Integrating PostgreSQL and TimescaleDB with Machine Learning Models
  • PostgreSQL with TimescaleDB: Implementing Temporal Data Analysis
  • Combining PostgreSQL, TimescaleDB, and Airflow for Data Workflows
  • PostgreSQL with TimescaleDB: Visualizing Real-Time Data with Superset
  • Using PostgreSQL with TimescaleDB for Energy Consumption Analysis
  • PostgreSQL with TimescaleDB: How to Query Massive Datasets Efficiently
  • Best Practices for Writing Time-Series Queries in PostgreSQL with TimescaleDB
  • PostgreSQL with TimescaleDB: Implementing Batch Data Processing
  • Using PostgreSQL with TimescaleDB for Network Traffic Analysis
  • PostgreSQL with TimescaleDB: Troubleshooting Common Performance Issues
  • Building an IoT Data Pipeline with PostgreSQL and TimescaleDB