CURRENT_TIMESTAMP以毫秒为单位

有什么办法在MySqlPostgreSql (或其他人只是出于好奇)的时间戳获得毫秒?

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

有没有这样的事情:

 SELECT CURRENT_MILLISEC --> 1331255526000 

或唯一的select是使用DATEDIFFera

在MySQL中以秒为单位获得Unix时间戳:

 select UNIX_TIMESTAMP(); 

详情: http : //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

没有testingPostgreSQL,但根据这个网站它应该工作: http : //www.raditha.com/postgres/timestamp.php

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

对于MySQL(5.6+),你可以这样做:

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

哪个会返回(例如):

 1420998416685 --milliseconds 

在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

从PostgreSQL上的timestamp值中提取毫秒的正确方法是根据当前的文档 :

 SELECT date_part('milliseconds', current_timestamp); --OR SELECT EXTRACT(MILLISECONDS FROM current_timestamp); 

与返回:秒字段,包括小数部分,乘以1000.请注意,这包括整秒。

使用:

 Select curtime(4); 

这会给你毫秒。

在PostgreSQL中,你可以使用:

 SELECT extract(epoch from now()); 

在MySQL上:

 SELECT unix_timestamp(now()); 

这些反应都没有真正解决在PostgreSQL的问题,即:

以毫秒为单位获取date字段的unix时间戳

我有同样的问题,并testing了不同的以前的答复没有得到满意的结果。

最后,我find了一个非常简单的方法,可能是最简单的方法:

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

即:

  • 我们提取了pgSQL的EPOCH ,也就是说,在时间戳谨慎的时候,我们的浮动秒列中的unix时间戳 (在一些复杂的查询中,如果这个转换不是显式的,pgSQL可能会出错)
  • 然后我们将它浮动,并乘以1000,以毫秒为单位的值

在Mysql 5.7+中,您可以执行

 select current_timestamp(6) 

更多细节

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

这里有一个适用于MariaDB和MySQL> = 5.6的expression式:

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

这依赖于NOW()始终在整个查询中返回相同时间的事实; 简单的UNIX_TIMESTAMP()也可能会工作,我不确定是基于文档 。 它还需要MySQL> = 5.6作为NOW()函数的新精度参数(MariaDB也可以)。

我发现在MySql中以毫秒为单位接收当前时间最简单的方法:

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

由于MySql 5.6。

我觉得需要继续改进,所以在MySQL中:

当前时间戳(以毫秒为单位)

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

给定date时间(3)的时间戳(以毫秒为单位):

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

将时间戳以毫秒为单位转换为datetime(3):

 from_unixtime(1430146422456 / 1000) 

将datetime(3)转换为以毫秒为单位的时间戳:

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

在MariaDB中,您可以使用

 SELECT NOW(4); 

要获得milisecs。 也看到这里 。

PostgreSQL中我们使用这种方法:

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

我最近面临同样的问题,我创build了一个小的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