如何在MySQL中获取当前时间戳(包括毫秒)?

5

我可以通过查询获得不带毫秒的大致时间

SELECT UNIX_TIMESTAMP(NOW());

但是如何获取精确的包含毫秒的时间戳呢?例如,在执行以上查询之后,我得到了1352717640的值,但我想要获得1352717640xxx(其中的xxx代表毫秒数)。

更新

其他 SO 上的答案(比如this)提供的解决方案如下:

SELECT UNIX_TIMESTAMP(NOW(3))*1000;

但是这个查询只会用“000”填充毫秒位,但我想要获得精确的毫秒值,例如 1352717640937
在SQLyog中:

enter image description here

在 MySQL 控制台中:

enter image description here

MySQL 5.1中是否可能?


可能是MySQL 5.6 DATETIME不接受毫秒/微秒的重复问题。 - McNets
@McNets,但我的问题完全不同... - Ksenia
1
https://stackoverflow.com/a/48098959/3270427 - McNets
@McNets,但是在这个答案中,毫秒只被替换为“000”,但我想获得精确的毫秒值。 - Ksenia
2
可能是mysql UNIX_TIMESTAMP(now()) - current time in miliseconds的重复问题。 - Jorge Campos
2个回答

5
我认为你没有测试过,但是解决方案是这样的
SELECT UNIX_TIMESTAMP(NOW(3))*1000;

SQL Fiddle

MySQL 5.6 Schema Setup:

Query 1:

SELECT UNIX_TIMESTAMP(NOW(3))*1000

Results:

| UNIX_TIMESTAMP(NOW(3))*1000 |
|-----------------------------|
|               1519827493419 |

可能的原因是MySQL版本,因为我测试过了,总是在结尾处得到'000'。我的版本是5.1... - Ksenia
你确定你正在执行 NOW(3) 吗? - Daniel E.
你能试试NOW()和NOW(3)吗?我觉得这可能是你的Mysql版本中的一个bug。 - Daniel E.
这两个函数返回相同的结果(“2018-03-01 15:13:28”)。 - Ksenia
我已经没有更多的想法了,也许你可以问一个问题,如何在mysql 5.1中执行NOW(3)操作。 - Daniel E.
显示剩余2条评论

1

MySQL 8.0.26

SELECT UNIX_TIMESTAMP(NOW(3))*1000;
-- return float 1672434492831.000

转换为整数:

SELECT FLOOR(UNIX_TIMESTAMP(NOW(3))*1000);
-- return INT 1672434492831

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接