Перейти к содержимому
Последнее обновление

MILLISECONDS_DIFF

Описание​

Функция MILLISECONDS_DIFF вычисляет разницу в миллисекундах между двумя значениями даты и времени. Результат — количество миллисекунд, полученное при вычитании времени начала из времени окончания. Функция поддерживает типы DATETIME и TIMESTAMP_NS.

Синтаксис​

MILLISECONDS_DIFF(`<date_or_time_expr1>`, `<date_or_time_expr2>`)

Параметры​

ПараметрОписание
<date_or_time_expr1>Время окончания, тип DATETIME или TIMESTAMP_NS.
<date_or_time_expr2>Время начала, тип DATETIME или TIMESTAMP_NS.

Возвращаемое значение​

Возвращает значение типа INT, представляющее разницу в миллисекундах между двумя значениями времени.

  • Если <date_or_time_expr1> позже, чем <date_or_time_expr2>, результат положительный.
  • Если <date_or_time_expr1> раньше, чем <date_or_time_expr2>, результат отрицательный.
  • Если значения времени совпадают (включая миллисекундную часть), результат равен 0.
  • Если входное значение имеет тип DATE (содержит только год, месяц и день), время по умолчанию устанавливается в 00:00:00.000.
  • Если входное значение времени содержит микросекунды (например, '2023-01-01 00:00:00.123456'), для вычисления оно автоматически усекается до миллисекундной точности (например, 123 milliseconds).
  • Если любой из параметров равен NULL, функция возвращает NULL.

Примеры​

-- Calculate millisecond difference
SELECT MILLISECONDS_DIFF('2020-12-25 21:00:00.623000', '2020-12-25 21:00:00.123000');
+-------------------------------------------------------------------------------+
| MILLISECONDS_DIFF('2020-12-25 21:00:00.623000', '2020-12-25 21:00:00.123000') |
+-------------------------------------------------------------------------------+
| 500 |
+-------------------------------------------------------------------------------+

-- End time is earlier than start time, returns negative value
SELECT MILLISECONDS_DIFF('2023-10-01 12:00:00.500', '2023-10-01 12:00:00.800');
+-------------------------------------------------------------------------+
| MILLISECONDS_DIFF('2023-10-01 12:00:00.500', '2023-10-01 12:00:00.800') |
+-------------------------------------------------------------------------+
| -300 |
+-------------------------------------------------------------------------+

-- Input includes microseconds (automatically truncated to milliseconds)
SELECT MILLISECONDS_DIFF('2023-01-01 00:00:00.123456', '2023-01-01 00:00:00.000123');
+-------------------------------------------------------------------------------+
| MILLISECONDS_DIFF('2023-01-01 00:00:00.123456', '2023-01-01 00:00:00.000123') |
+-------------------------------------------------------------------------------+
| 123 |
+-------------------------------------------------------------------------------+

-- Input is of DATE type (default time is 00:00:00.000)
SELECT MILLISECONDS_DIFF('2023-10-02', '2023-10-01');
+-----------------------------------------------+
| MILLISECONDS_DIFF('2023-10-02', '2023-10-01') |
+-----------------------------------------------+
| 86400000 |
+-----------------------------------------------+

-- Any parameter is NULL, returns NULL
SELECT MILLISECONDS_DIFF('2023-01-01 00:00:00', NULL), MILLISECONDS_DIFF(NULL, '2023-01-01 00:00:00');
+------------------------------------------------+------------------------------------------------+
| milliseconds_diff('2023-01-01 00:00:00', NULL) | milliseconds_diff(NULL, '2023-01-01 00:00:00') |
+------------------------------------------------+------------------------------------------------+
| NULL | NULL |
+------------------------------------------------+------------------------------------------------+

-- Times are identical, returns 0
SELECT MILLISECONDS_DIFF('2025-08-11 15:30:00.123', '2025-08-11 15:30:00.123');
+-------------------------------------------------------------------------+
| MILLISECONDS_DIFF('2025-08-11 15:30:00.123', '2025-08-11 15:30:00.123') |
+-------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------+