Подтвердить что ты не робот

CURRENT_TIMESTAMP в миллисекундах

Есть ли способ получить миллисекунды из метки времени в MySql или PostgreSql (или других просто из любопытства)?

SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572

Есть ли что-то вроде этого:

SELECT CURRENT_MILLISEC
--> 1331255526000

или единственной альтернативой является использование DATEDIFF из era?

4b9b3361

Ответ 2

Для MySQL (5.6+) вы можете сделать это:

SELECT ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)

Что вернется (например,):

1420998416685 --milliseconds

Ответ 3

В mysql можно использовать функцию uuid для извлечения миллисекунд.

select conv( 
            concat(
                   substring(uid,16,3), 
                   substring(uid,10,4), 
                   substring(uid,1,8))
                   ,16,10) 
            div 10000 
            - (141427 * 24 * 60 * 60 * 1000) as current_mills
from (select uuid() uid) as alias;

Результат:

+---------------+
| current_mills |
+---------------+
| 1410954031133 |
+---------------+

Он также работает в более старых версиях mysql!

Благодарим вас за эту страницу: http://rpbouman.blogspot.com.es/2014/06/mysql-extracting-timstamp-and-mac.html

Ответ 4

Правильный способ извлечения миллисекунд из значения временной метки в PostgreSQL в соответствии с текущей документацией:

SELECT date_part('milliseconds', current_timestamp);

--OR

SELECT EXTRACT(MILLISECONDS FROM current_timestamp);

с возвратом: поле секунд, включая дробные части, умноженное на 1000. Обратите внимание, что это включает полные секунды.

Ответ 5

Использование:

Select curtime(4);

Это даст вам миллисекунды.

Ответ 7

В PostgreSQL вы можете использовать:

SELECT extract(epoch from now());

в MySQL:

SELECT unix_timestamp(now());

Ответ 8

Ни один из этих ответов действительно не решает проблему в postgreSQL, т.е.

получение unix timestamp поля даты в миллисекундах

У меня была та же проблема и протестировало разные предыдущие ответы без удовлетворения результата.

Наконец, я нашел действительно простой способ, возможно, самый простой:

SELECT (EXTRACT (EPOCH FROM <date_column>::timestamp)::float*1000 as unix_tms
FROM <table>

а именно:

  • Мы извлекаем pgSQL EPOCH, т.е. временную метку unix, в полях с плавающей запятой из нашего столбца, заброшенного в основе временной отметки (в некоторых сложных запросах pgSQL может вызывать ошибку, если этот приведение не является явным).
  • тогда мы будем использовать его в float и умножим его на 1000, чтобы получить значение в миллисекундах

Ответ 9

Здесь выражение, которое работает для MariaDB и MySQL >= 5.6:

SELECT (UNIX_TIMESTAMP(NOW()) * 1000000 + MICROSECOND(NOW(6))) AS unix_now_in_microseconds;

Это зависит от того, что NOW() всегда возвращает одно и то же время во время запроса; возможно, что простая UNIX_TIMESTAMP() будет работать, я не уверен на основе документации. Он также требует MySQL >= 5.6 для нового аргумента точности для функции NOW() (также работает MariaDB).

Ответ 10

Самый простой способ найти текущее время в миллисекундах в MySql:

SELECT (UNIX_TIMESTAMP(NOW(3)) * 1000)

Так как MySql 5.6.

Ответ 11

Основное недоразумение в MySQL с отметками времени - это то, что MySQL по умолчанию возвращает и сохраняет временные метки без дробной части.

SELECT current_timestamp()  => 2018-01-18 12:05:34

который может быть преобразован в метку секунд в секундах

SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429

Чтобы добавить дробную часть:

SELECT current_timestamp(3) => 2018-01-18 12:05:58.983

который может быть преобразован в метку времени в микросекундах, как

SELECT CAST( 1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786

Есть несколько трюков с хранением в таблицах. Если ваша таблица была создана как

    CREATE TABLE 'ts_test_table' (
      'id' int(1) NOT NULL,
      'not_fractional_timestamp' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY ('id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

чем MySQL не будет хранить дробную часть внутри него:

    id, not_fractional_timestamp
    1,  2018-01-18 11:35:12

Если вы хотите добавить дробную часть в свою таблицу, вам нужно создать свою таблицу по-другому:

    CREATE TABLE 'ts_test_table2' (
      'id' int(1) NOT NULL,
      'some_data' varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      'fractional_timestamp' timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
      PRIMARY KEY ('id')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

что приводит к требуемому результату:

    id, some_data, fractional_timestamp
    1,  8,         2018-01-18 11:45:40.811

Функция current_timestamp() может получать значение до 6, но я обнаружил (по крайней мере, в моей установленной версии MySQL 5.7.11), что точность фракции 6 приводит к тому же постоянному значению 3 цифры в хвосте, в моем дело 688

    id, some_data, fractional_timestamp
    1,  2,         2018-01-18 12:01:54.167688
    2,  4,         2018-01-18 12:01:58.893688

Это означает, что реальная полезная точность в MySQL равна 3.

Ответ 12

Я чувствовал необходимость продолжать совершенствовать, поэтому в MySQL:

Текущая метка времени в миллисекундах:

floor(unix_timestamp(current_timestamp(3)) * 1000)

Временная метка в миллисекундах из заданного времени (3):

floor(unix_timestamp("2015-04-27 15:14:55.692") * 1000)

Преобразовать временную метку в миллисекундах в datetime (3):

from_unixtime(1430146422456 / 1000)

Преобразование даты и времени (3) в метку времени в миллисекундах:

floor(unix_timestamp("2015-04-27 14:53:42.456") * 1000)

Ответ 13

В MariaDB вы можете использовать

SELECT NOW(4);

Получить milisecs. См. здесь.

Ответ 14

В PostgreSQL мы используем этот подход:

SELECT round(EXTRACT (EPOCH FROM now())::float*1000)

Ответ 15

Недавно я столкнулся с той же проблемой, и создал небольшой проект github, содержащий новую функцию mysql UNIX_TIMESTAMP_MS(), которая возвращает текущую временную метку в миллисекундах.

Также вы можете сделать следующее:

SELECT UNIX_TIMESTAMP_MS(NOW(3)) или SELECT UNIX_TIMESTAMP_MS(DateTimeField)

Проект находится здесь: https://github.com/silviucpp/unix_timestamp_ms

Для компиляции вам нужно просто запустить make compile в корне проекта.

Затем вам нужно только скопировать разделяемую библиотеку в /usr/lib/mysql/plugin/ (или любую другую папку плагинов на вашем компьютере.)

После этого просто откройте консоль mysql и запустите:

CREATE FUNCTION UNIX_TIMESTAMP_MS RETURNS INT SONAME 'unix_timestamp_ms.so';

Надеюсь, это поможет, Silviu

Ответ 16

В MySQL:

  SELECT UNIX_TIMESTAMP() * 1000;