CURRENT_TIMESTAMP,以毫秒为单位

Mar*_*ace 60 mysql sql postgresql datetime timestamp

有没有什么办法让出一个时间戳的毫秒MySqlPostgreSql(或其他人只是出于好奇)?

SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572
Run Code Online (Sandbox Code Playgroud)

有这样的事情:

SELECT CURRENT_MILLISEC
--> 1331255526000
Run Code Online (Sandbox Code Playgroud)

或唯一的选择是使用DATEDIFFera

Cla*_*nda 50

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

SELECT ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)
Run Code Online (Sandbox Code Playgroud)

哪个会返回(例如):

1420998416685 --milliseconds
Run Code Online (Sandbox Code Playgroud)

  • 在 DST 时区不可靠!(每年错一个小时) (2认同)

Bil*_*oon 34

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

select UNIX_TIMESTAMP();
Run Code Online (Sandbox Code Playgroud)

详细信息: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() ) );
Run Code Online (Sandbox Code Playgroud)

  • 这不是第二次准确吗? (27认同)

jba*_*ina 34

在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;
Run Code Online (Sandbox Code Playgroud)

结果:

+---------------+
| current_mills |
+---------------+
| 1410954031133 |
+---------------+
Run Code Online (Sandbox Code Playgroud)

它也适用于较旧的mysql版本!

感谢您对本页:http://rpbouman.blogspot.com.es/2014/06/mysql-extracting-timstamp-and-mac.html

  • 起初我笑了,但这是我到目前为止找到的唯一方法来获得MySQL 5.5中的确切时间......所以这就是解决方案:)干杯. (4认同)

Ahm*_*med 11

在Mysql 5.7+中,您可以执行

select current_timestamp(6)
Run Code Online (Sandbox Code Playgroud)

更多细节

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

  • 注意:这也可以在Mysql 5.6.4中找到:https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html另外,`current_timestamp`是`now`的同义词,所以`现在(6)`是获得该值的较短方式. (3认同)

Com*_*g88 10

海报要求自 Epoch 以来 MS整数值,而不是自 Epoch 以来的时间或 S。

为此,您需要使用NOW(3)which 为您提供小数秒到 3 个小数位的时间(即 MS 精度):2020-02-13 16:30:18.236

然后UNIX_TIMESTAMP(NOW(3))获得自 epoc 以来的小数秒时间: 1581611418.236

最后,FLOOR(UNIX_TIMESTAMP(NOW(3))*1000)为了得到一个很好的整数,对于自 epoc 以来的毫秒: 1581611418236

使其成为 MySQL 函数:

CREATE FUNCTION UNIX_MS() RETURN BIGINT DETERMINISTIC
BEGIN
    RETURN FLOOR(UNIX_TIMESTAMP(NOW(3))*1000);
END
Run Code Online (Sandbox Code Playgroud)

现在运行 SELECT UNIX_MS();

注意:这都是手工复制的,所以如果有错误,请随时修复;)


小智 8

从PostgreSQL上的时间戳值中提取毫秒的正确方法相应于当前文档:

SELECT date_part('milliseconds', current_timestamp);

--OR

SELECT EXTRACT(MILLISECONDS FROM current_timestamp);
Run Code Online (Sandbox Code Playgroud)

with returns:秒字段,包括小数部分,乘以1000.请注意,这包括整秒.


Igo*_*gor 8

带有时间戳的MySQL中的主要误解是,默认情况下MySQL既返回又存储没有小数部分的时间戳

SELECT current_timestamp()  => 2018-01-18 12:05:34
Run Code Online (Sandbox Code Playgroud)

可以将其转换为秒时间戳

SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429
Run Code Online (Sandbox Code Playgroud)

要添加小数部分:

SELECT current_timestamp(3) => 2018-01-18 12:05:58.983
Run Code Online (Sandbox Code Playgroud)

可以将其转换为微秒时间戳

SELECT CAST( 1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786
Run Code Online (Sandbox Code Playgroud)

在表中存储的技巧很少。如果您的表是这样创建的

    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;
Run Code Online (Sandbox Code Playgroud)

MySQL不会在其中存储小数部分:

    id, not_fractional_timestamp
    1,  2018-01-18 11:35:12
Run Code Online (Sandbox Code Playgroud)

如果要将小数部分添加到表中,则需要以其他方式创建表:

    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;
Run Code Online (Sandbox Code Playgroud)

导致所需的结果:

    id, some_data, fractional_timestamp
    1,  8,         2018-01-18 11:45:40.811
Run Code Online (Sandbox Code Playgroud)

current_timestamp()函数允许接收的值最大为6,但我发现(至少在Windows上安装的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
Run Code Online (Sandbox Code Playgroud)

这意味着MySQL真正可用的时间戳精度取决于平台:

  • 在Windows上:3
  • 在Linux上:6


Yuv*_*val 7

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

SELECT (UNIX_TIMESTAMP(NOW(3)) * 1000)
Run Code Online (Sandbox Code Playgroud)

从 MySql 5.6 开始。


Tan*_*uAD 6

使用:

Select curtime(4);
Run Code Online (Sandbox Code Playgroud)

这将给你毫秒.

  • 还要确保DATETIME列的长度为6,并存储该列.您还需要MySQL 5.6.x才能使用毫秒. (4认同)