Подтвердить что ты не робот

Как получить микросекунды или миллисекунды из текущего времени 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, что я хочу знать микросекунды текущего времени?


EDIT:

Рассмотрим это:

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, чтобы получить миллисекунду последней записи этой таблицы...

4b9b3361

Ответ 1

MySQL 5.6 поддерживает миллисекундную точность в sysdate.

попробуйте

select sysdate(6) вернет 2013-04-16 13:47:56.273434

и

select sysdate(3) вернет 2013-04-16 13:47:56.273

Ответ 2

Взгляните на то, что говорит 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.

Поэтому вам нужно сохранить его не как значение даты, а как простое значение с плавающей запятой.

Ответ 3

Для mysql 5.6

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