
The TIMESTAMPDIFF() function in MySQL is used to subtract a period of time between two datetime values.
The function requires a unit of time value that you want to retrieve and two datetime expressions.
The syntax of TIMESTAMPDIFF is as follows:
TIMESTAMPDIFF(unit, date_1, date_2)
The unit parameter will determine how MySQL returns the value after subtraction. It can be one of the following values:
FRAC_SECOND(microseconds)SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
The date_1 and date_2 expressions can be of DATE, DATETIME, or TIMESTAMP type. You can put literal date expressions or column names of date type.
Here’s an example of how TIMESTAMPDIFF() function works:
SELECT TIMESTAMPDIFF(DAY, "2021-10-05", "2021-10-08");
The returned result set will be as shown below:
+------------------------------------------------+
| TIMESTAMPDIFF(DAY, "2021-10-05", "2021-10-08") |
+------------------------------------------------+
| 3 |
+------------------------------------------------+
The function call above calculates the DAY difference between 8th October 2021 - 5th October 2021, returning 3 days.
You can change the unit parameter from DAY to any other valid value as listed above.
The example below calculates the MONTH difference between the two dates:
SELECT TIMESTAMPDIFF(MONTH, "2021-10-05", "2021-10-08");
-- returns 0
The function will return a negative number when the date_1 argument is later than date_2 as follows:
SELECT TIMESTAMPDIFF(MONTH, "2021-12-05", "2021-10-08");
-- +--------------------------------------------------+
-- | TIMESTAMPDIFF(MONTH, "2021-12-05", "2021-10-08") |
-- +--------------------------------------------------+
-- | -1 |
-- +--------------------------------------------------+
You can also mix the arguments between one date type and another.
For example, DATE and DATETIME can still be compared like this:
SELECT TIMESTAMPDIFF(MINUTE, "2021-10-10", "2021-10-10 03:00:00");
-- returns 180
The DATE value will be treated as a DATETIME internally, with 00:00:00 as its time part.
This means that you can use two date columns with different types as arguments for the function.
In the example table below, the join_date is of DATE type while :
+------------+---------------------+
| join_date | last_update |
+------------+---------------------+
| 2021-10-15 | 2021-10-19 09:20:10 |
| 2021-10-16 | 2021-10-19 09:20:10 |
+------------+---------------------+
You can query the table columns above to find how many days passed between last_update and join_date as shown below:
SELECT TIMESTAMPDIFF(DAY, join_date, last_update) FROM example;
-- +--------------------------------------------+
-- | TIMESTAMPDIFF(DAY, join_date, last_update) |
-- +--------------------------------------------+
-- | 4 |
-- | 3 |
-- +--------------------------------------------+
Keep in mind that the function always returns an integer number, so any floating number extracted between the two dates will be rounded down.
For example, 2021-07-25 and 2021-10-15 could return 11.7 when counting the week difference, but TIMESTAMPDIFF() will round down the result to 11 as shown below:
SELECT TIMESTAMPDIFF(WEEK, "2021-07-25", "2021-10-15") as weeks_passed;
-- +--------------+
-- | weeks_passed |
-- +--------------+
-- | 11 |
-- +--------------+
You’ve just learned how to use the TIMESTAMPDIFF() function to count the time differences between two different dates in MySQL.
Nice work! 👍