Вопрос: CURRENT_TIMESTAMP в миллисекундах


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

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

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

SELECT CURRENT_MILLISEC
--> 1331255526000

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


47


источник


Ответы:


Чтобы получить временную метку Unix в секундах  в MySQL:

select UNIX_TIMESTAMP();

Детали: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

Не протестирован PostgreSQL, но в соответствии с этим сайтом он должен работать: http://www.raditha.com/postgres/timestamp.php

select round( date_part( 'epoch', now() ) );

34



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

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

Который вернется (например):

1420998416685 --milliseconds

39



В 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


28



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

SELECT date_part('milliseconds', current_timestamp);

--OR

SELECT EXTRACT(MILLISECONDS FROM current_timestamp);

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


7



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

Select curtime(4);

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


6



В Mysql 5.7+ вы можете выполнить

select current_timestamp(6)

Больше подробностей

https://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html


6



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

SELECT extract(epoch from now());

на MySQL:

SELECT unix_timestamp(now());

4



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

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

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

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

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

а именно:

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

4



Вот выражение, которое работает для 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).


3