如何从MySQL当前时间检索微秒或毫秒?

问题描述 投票:11回答:4

我正在尝试在MySQL上创建我的第一个存储函数。在这个函数中,我想以3微秒的数字返回当前日期和时间的时间戳,如下所示:YYYYMMDDHHMMSSZZZ

我在我的数据库中使用此数字来为我的记录脱机创建唯一键,这样当我的系统从不同的脱机服务器合并数据库时它们不会崩溃。

所以我的第一次尝试就是SELECT CAST(MICROSECOND(NOW()) AS CHAR(3));

但它返回0。

如果我尝试SELECT CAST(MICROSECOND('2009-12-31 23:59:59.001210') AS CHAR(3));

它根据我的需要返回121。

那么,如何告诉MySQL我想知道当前时间的微秒?


编辑:

考虑一下:

CREATE FUNCTION CHAVE (pTable VARCHAR(32)) RETURNS CHAR(20)
BEGIN
    DECLARE vSigla CHAR(3);
    DECLARE vDateTime CHAR(14);
    DECLARE vMilli CHAR(3);
    DECLARE vKey CHAR(20);
    SET vSigla = (SELECT SIGLA FROM TABLELIST WHERE NOME = pTable);
    SET vDateTime = (SELECT CAST(LEFT(UTC_TIMESTAMP()+0, 14) AS CHAR(14)));
    SET vMilli = LPAD(FLOOR(RAND() * 1000), 3, '0');
    SET vKey = CONCAT(vSigla, vDateTime, vMilli);
    RETURN vKey;
END;

的结果:

INSERT INTO TABLEX (dateID, name) VALUES (CHAVE('TABLEX'), 'EASI');

将来自CHAVE('TABLEX'):

KEY20130320151159666

666将是一个随机数,但我希望它是当前时间的实际毫秒数,所以我没有可能重复的密钥。


如果我只能使用SHOW COLUMNS FROM @TableName WHERE FIELD_NAME LIKE '%_ID' LIMIT 1并将其插入非动态SELECT中以获得该表的最后一条记录的毫秒数...

mysql datetime milliseconds
4个回答
26
投票

MySQL 5.6支持sysdate函数的毫秒精度。

尝试

select sysdate(6)将返回2013-04-16 13:47:56.273434

select sysdate(3)将返回2013-04-16 13:47:56.273


5
投票

看看MySQL所说的内容(http://dev.mysql.com/doc/refman/5.1/en/fractional-seconds.html):

However, when MySQL stores a value into a column of any temporal data type, it discards any fractional part and does not store it.

因此,您需要将其存储为日期值,而不是存储为简单的浮点值。


4
投票

对于mysql 5.6

round(unix_timestamp() * 1000  + MICROSECOND(sysdate(6)) / 1000)

-2
投票

这是我对Millisecond管理的解决方案。

我只是使用“text”数据类型作为数据存储,因为你必须自己控制数据验证。

CREATE TABLE time_testid INT NOT NULL AUTO_INCREMENT,start_time TEXT NULL,stop_time TEXT NULL,difference TEXT NULL,ranking INT NULL,PRIMARY KEY(id))

INSERT INTO time_test VALUES(NULL,'10:10:10.111111','10:10:10.456789',NULL,NULL)INSERT INTO time_test VALUES(NULL,'10:10:10.111111','10:10:20.777777', NULL,NULL)INSERT INTO time_test VALUES(NULL,'10:10:10.111111','10:10:01.999999',NULL,NULL)

Now you can calculate like this 现在你可以这样计算SELECT * FROM time_test ORDER BY TIME(stop_time)

计算时间差异,对我来说非常好。来自time_test的SELECT *,TIMEDIFF(stop_time,start_time) Calculate time diff, very good for me.

也可以计算和存储你可以自己剪一些字符串。更新time_test设置差异= concat(TIMEDIFF(stop_time,start_time),MICROSECOND(TIMEDIFF(stop_time,start_time)))also can calcuate and store back you can cut some string by yourself.

你也通过这个命令进行排名:SET @r:= 0; 更新time_test SET排名=(@r:=(@ r + 1))ORDER BY difference ASC; you also doing ranking by this command:

© www.soinside.com 2019 - 2024. All rights reserved.