Получение текущего timestamp в миллисекундах в MySQL и PostgreSQL

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы получить значение CURRENT_TIMESTAMP с точностью до миллисекунд в PostgreSQL, примените EXTRACT(EPOCH...) и умножьте результат на 1000. Вот пример соответствующего SQL-запроса:

SQL
Скопировать код
SELECT EXTRACT(EPOCH FROM CURRENT_TIMESTAMP) * 1000 AS milliseconds;

В MySQL следует учитывать точность:

SQL
Скопировать код
SELECT UNIX_TIMESTAMP(NOW(3)) * 1000 AS milliseconds;

В результате такого запроса вы получите текущее время в миллисекундах от начала эпохи Unix.

Получение времени, точного до миллисекунд, в MySQL

Начиная с версии MySQL 5.6, точное значение текущего времени в миллисекундах можно получить, используя функцию CURRENT_TIMESTAMP взамен указания нужной точности. Пример:

SQL
Скопировать код
SELECT UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000 AS milliseconds;

Отметим, что MySQL по умолчанию не поддерживает миллисекунды в столбцах типа TIMESTAMP. Для хранения метки времени с точностью до миллисекунд применяйте типы timestamp(3) или datetime(3).

Различия в точности миллисекунд между разными платформами

Точность в MySQL во многом зависит от платформы: максимальная точность для Windows составляет 3, в то время как для Linux — 6. Это может повлиять на точность возвращаемого результата.

Создание пользовательских функций в MySQL для упрощения процесса

Рекомендуем создать пользовательскую функцию в MySQL для удобства получения текущего времени в миллисекундах. Это позволит упростить ваш запрос до вида SELECT UNIX_MS();.

Почему стоит избегать альтернативных методов

Применение творческих, но ненадежных методов, таких как использование функции UUID() для получения миллисекунд, может усложнить систему и негативно повлиять на её производительность. Также стоит избегать использования DATEDIFF() в этой сфере, поскольку его основное применение сконцентрировано на сравнении дат, а не на точном измерении времени.

Визуализация

Задействуйте функцию CURRENT_TIMESTAMP как спортсмена на дорожке времени:

SQL
Скопировать код
SELECT EXTRACT(EPOCH FROM CURRENT_TIMESTAMP) * 1000;

Этот запрос сообщает нам, сколько "препятствий" (то есть миллисекунд) преодолевает наш "бегун" (то есть временная метка).

Тщательное хранение и обработка миллисекунд

Правильный выбор типов данных для хранения миллисекунд

В MySQL для корректного хранения меток времени с точностью до миллисекунд используйте DATETIME(3) или TIMESTAMP(3), где цифра в скобках указывает на желаемую точность.

Преобразование временных меток в целые числа

Когда вам нужно обработать миллисекунды как целое число, примените функцию FLOOR следующим образом:

SQL
Скопировать код
SELECT FLOOR(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000) AS milliseconds;

Это позволит получить временную метку в виде целого числа, отброшены будут доли миллисекунды.

Полезные материалы

  1. PostgreSQL: Документация функций даты/времени — описание функций PostgreSQL для работы с датой и временем.
  2. MySQL: Руководство по функциям даты/времени — инструкции по работе с CURRENT_TIMESTAMP.
  3. GETDATE в SQL Server — подробное описание функции GETDATE() и временных меток.
  4. Функции даты и времени в SQLite — информация о функциях SQLite для работы с метками времени, включая дробные секунды.
  5. Точность микросекунд в MariaDB — обсуждение направлений работы с метками времени с точностью до микросекунд в MariaDB.
  6. SYSTIMESTAMP в Oracle — документация Oracle о SYSTIMESTAMP и о получении точности до миллисекунд.
  7. Точность CURRENT_TIMESTAMP в Informix — указания по использованию CURRENT_TIMESTAMP в Informix.