我正在尝试在 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 以获取该表最后一条记录的毫秒数...