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