How to subtract Date/Time values in MySQL 8

Updated: January 26, 2024 By: Guest Contributor Post a comment

Introduction

Working with dates and times is often a necessary part of dealing with databases, and MySQL 8 provides robust functionality for manipulating these values. One of the operations you might find yourself needing to perform is the subtraction of date and time values. Whether you’re calculating the difference between two dates or adjusting a timestamp backwards by a specific interval, MySQL 8 lets you handle date/time subtraction straightforwardly once you’re familiar with the functions and syntax.

In this tutorial, we will explore various ways to subtract date and time values in MySQL 8. We’ll discuss the use of the DATE_SUB function, the TIMESTAMPDIFF function, arithmetic on dates, and intervals. Each of these methods will be accompanied by relevant code examples.

Understanding Date and Time Data Types

Before diving into subtraction, let’s ensure we understand the different date and time data types in MySQL:

  • DATE – format YYYY-MM-DD
  • TIME – format HH:MM:SS
  • DATETIME – combination of date and time (YYYY-MM-DD HH:MM:SS)
  • TIMESTAMP – similar to DATETIME, but includes timezone information
  • YEAR – format YYYY

Subtracting Dates with DATE_SUB

The DATE_SUB function allows you to subtract a specified time interval from a date. The function takes two arguments: the starting date, and the interval to subtract.

SELECT DATE_SUB('2023-04-15', INTERVAL 10 DAY);

This would return ‘2023-04-05’, which is 10 days before April 15, 2023.

Subtracting Time with TIMESTAMPDIFF

If you need to calculate the difference between two timestamps, TIMESTAMPDIFF is the function you’re looking for. This function returns the difference in the units specified, between the first and second arguments.

SELECT TIMESTAMPDIFF(DAY, '2023-04-15', '2023-05-15') AS days_difference;

This query would return 30, as there are 30 days between April 15, 2023, and May 15, 2023.

Dates Arithmetic with Operators

You can also perform arithmetic on dates using the minus (-) operator, provided you’re dealing with date or datetime values. Timestamps should be converted to a uniform format, or they could result in unexpected behaviors due to timezone conversions.

SELECT '2023-04-15' - INTERVAL 10 DAY;

This also yields ‘2023-04-05’.

Using Intervals Wisely

MySQL recognizes different interval units you can use in your subtraction operation. You can subtract intervals in days, weeks, months, and even microseconds.

SELECT DATE_SUB('2023-04-15 08:00:00', INTERVAL '1-2' YEAR_MONTH);

This query subtracts 1 year and 2 months from the specified datetime, leading to ‘2022-02-15 08:00:00’. When using intervals for subtraction, clarity and precision are vital—ensure you specify exactly what you want to subtract.

Subtracting Time Intervals from Current Date/Time

To subtract from the current date/time, you can use MySQL’s NOW() function like so:

SELECT NOW() - INTERVAL 1 HOUR;

The above query subtracts one hour from the current date and time.

Working with DATEDIFF

Another function to consider is DATEDIFF. While not a direct method for subtracting one date from another, it calculates the difference in days between two dates. For times and datetimes, consider TIMEDIFF and TIMESTAMPDIFF.

SELECT DATEDIFF('2023-05-15','2023-04-15') as DifferenceInDays;

This query will return the number of days between the dates, which would be 30.

Conclusion

In this tutorial, we’ve looked at several methods for subtracting date/time values in MySQL 8. From DATE_SUB to interval arithmetic, you now have the tools to manipulate date and time data effectively. As with all database operations, it’s crucial to understand the data types you’re working with and their associated behaviors in time zones and leaps years, among other considerations. With this knowledge in hand, you can confidently work with time-related data in MySQL.

Experiment with the provided examples, and you’ll soon be fluent in date/time manipulation using MySQL 8. Remember to test your queries closely in a development environment before running them in production to avoid any unexpected results.