Последнее обновление
DATEDIFF
Описание
Функция DATEDIFF вычисляет разность между двумя значениями типов DATE, DATETIME или TIMESTAMP_NS с точностью до дня. Она возвращает количество дней, полученное вычитанием expr2 из expr1. Функция использует только дату и игнорирует часы, минуты, секунды и доли секунды во временной части.
Поведение этой функции соответствует поведению функции datediff в MySQL.
Синтаксис
DATEDIFF(<expr1>, <expr2>)
Параметры
| Параметр | Описание |
|---|---|
<expr1> | Дата, из которой выполняется вычитание. Поддерживаются типы DATE, DATETIME и TIMESTAMP_NS. Подробные сведения о форматах см. в разделах Преобразование даты и времени и Преобразование даты. |
<expr2> | Вычитаемая дата. Поддерживаются типы DATE, DATETIME и TIMESTAMP_NS. |
Возвращаемое значение
Возвращает значение expr1 - expr2 с точностью до дня. Тип результата: INT.
Особые случаи:
- Если expr1 больше expr2, возвращается положительное число, иначе возвращается отрицательное число.
- Если любой из параметров равен NULL, возвращается NULL.
- Временная часть игнорируется.
Примеры
-- The two dates differ by 1 day (ignoring the time part)
select datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME));
+-----------------------------------------------------------------------------------+
| datediff(CAST('2007-12-31 23:59:59' AS DATETIME), CAST('2007-12-30' AS DATETIME)) |
+-----------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------+
-- The first date is earlier than the second date, returning a negative number
select datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME));
+-----------------------------------------------------------------------------------+
| datediff(CAST('2010-11-30 23:59:59' AS DATETIME), CAST('2010-12-31' AS DATETIME)) |
+-----------------------------------------------------------------------------------+
| -31 |
+-----------------------------------------------------------------------------------+
-- TIMESTAMP_NS can be used for either parameter
SELECT DATEDIFF(CAST('2024-01-02 00:00:00.000000001' AS TIMESTAMP_NS),
CAST('2024-01-01 23:59:59.999999' AS DATETIME(6))) AS result;
+--------+
| result |
+--------+
| 1 |
+--------+
-- Any parameter is NULL
mysql> select datediff('2023-01-01', NULL);
+------------------------------+
| datediff('2023-01-01', NULL) |
+------------------------------+
| NULL |
+------------------------------+
-- If input datetime type, will ignore time part
select datediff('2023-01-02 13:00:00', '2023-01-01 12:00:00');
+--------------------------------------------------------+
| datediff('2023-01-02 13:00:00', '2023-01-01 12:00:00') |
+--------------------------------------------------------+
| 1 |
+--------------------------------------------------------+
select datediff('2023-01-02 12:00:00', '2023-01-01 13:00:00');
+--------------------------------------------------------+
| datediff('2023-01-02 12:00:00', '2023-01-01 13:00:00') |
+--------------------------------------------------------+
| 1 |
+--------------------------------------------------------+
1 row in set (0.01 sec)