CURRENT_TIMESTAMP以毫秒为单位
有什么办法在MySql
或PostgreSql
(或其他人只是出于好奇)的时间戳获得毫秒?
SELECT CURRENT_TIMESTAMP --> 2012-03-08 20:12:06.032572
有没有这样的事情:
SELECT CURRENT_MILLISEC --> 1331255526000
或唯一的select是使用DATEDIFF
从era
?
在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