如何从MySQL当前时间获取微秒或毫秒? [英] How to retrieve microseconds or milliseconds from MySQL current time?

查看:1814
本文介绍了如何从MySQL当前时间获取微秒或毫秒?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在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 )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);
返回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 5.6支持 sysdate 功能。



尝试



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





select sysdate(3) will retu rn 2013-04-16 13:47:56.273


I am trying to create my first stored function on MySQL. In this function I want to return the timestamp of the current date and time with 3 microsecond digits like this: YYYYMMDDHHMMSSZZZ

I use this number in my database to create unique keys for my records offline so they don't crash when my systems merge databases from different offline servers.

So my first try for that was SELECT CAST(MICROSECOND(NOW()) AS CHAR(3));

But it returns 0.

If I try SELECT CAST(MICROSECOND('2009-12-31 23:59:59.001210') AS CHAR(3));

It returns 121, as I need.

So, How to tell MySQL that I want to know the microseconds of the current time?


EDIT:

Consider this:

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;

The result of:

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

Will be, from CHAVE('TABLEX'):

KEY20130320151159666

Where 666 will be a random number, but I wish it was the real milliseconds count of the current time, so I have no possible duplicated key.


If only I could use SHOW COLUMNS FROM @TableName WHERE FIELD_NAME LIKE '%_ID' LIMIT 1 and insert that in a non-dynamic SELECT to get the millisecond of the last record of that table...

解决方案

MySQL 5.6 supports the millisecond precision in the sysdate function.

try

select sysdate(6) will return 2013-04-16 13:47:56.273434

and

select sysdate(3) will return 2013-04-16 13:47:56.273

这篇关于如何从MySQL当前时间获取微秒或毫秒?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆