Here are some options for subtracting one or more microseconds from a datetime expression in MariaDB.
The SUBTIME() Function
The SUBTIME() subtracts a given amount of time from a time or datetime value.
Example:
SELECT SUBTIME('2021-05-01 10:00:00', '00:00:00.123456');
Result:
+---------------------------------------------------+
| SUBTIME('2021-05-01 10:00:00', '00:00:00.123456') |
+---------------------------------------------------+
| 2021-05-01 09:59:59.876544 |
+---------------------------------------------------+
You can also change the other time units, such as hours, minutes, seconds, etc.
The DATE_SUB() Function
The DATE_SUB() function allows you to subtract a certain number of date/time units from a date or datetime expression. Therefore we can use this function to return the datetime value, minus a certain number of microseconds.
Example:
SELECT DATE_SUB('2021-05-01 10:00:00', INTERVAL 300 MICROSECOND);
Result:
+-----------------------------------------------------------+
| DATE_SUB('2021-05-01 10:00:00', INTERVAL 300 MICROSECOND) |
+-----------------------------------------------------------+
| 2021-05-01 09:59:59.999700 |
+-----------------------------------------------------------+
Note that the MICROSECOND keyword remains non-plural regardless of whether you subtract one microsecond or more.
Passing Just the Date
Here’s what happens if we provide just a date value:
SELECT DATE_SUB('2021-05-01', INTERVAL 3 MICROSECOND);
Result:
+------------------------------------------------+
| DATE_SUB('2021-05-01', INTERVAL 3 MICROSECOND) |
+------------------------------------------------+
| 2021-04-30 23:59:59.999997 |
+------------------------------------------------+
It assumes the time starts at 00:00:00, and so the MICROSECOND amount is subtracted from that.
The Subtraction Operator (-)
Another way to subtract one or more microseconds from a datetime value is to use the subtraction operator (-), also known as the minus operator.
Example:
SELECT '2021-05-01 10:00:00' - INTERVAL 30 MICROSECOND;
Result:
+-------------------------------------------------+ | '2021-05-01 10:00:00' - INTERVAL 30 MICROSECOND | +-------------------------------------------------+ | 2021-05-01 09:59:59.999970 | +-------------------------------------------------+
The Addition Operator (+)
You can alternatively use the addition operator (+) along with a negative amount.
Example:
SELECT '2021-05-01 10:00:00' + INTERVAL -30 MICROSECOND;
Result:
+--------------------------------------------------+ | '2021-05-01 10:00:00' + INTERVAL -30 MICROSECOND | +--------------------------------------------------+ | 2021-05-01 09:59:59.999970 | +--------------------------------------------------+
Other Ways to Subtract Microseconds
Here are some other approaches you could use to subtract one or more microseconds from a datetime value:
- The
SUBTIME()function. - The
ADDTIME()function (providing a negative amount will subtract that amount from the datetime value). - The
SUBDATE()function (this is a synonym forDATE_SUB()when used with the same syntax). - The
DATE_ADD()function (providing a negative amount will subtract that amount from the datetime value). - The
ADDDATE()function (providing a negative amount will subtract that amount from the datetime value).