Sto cercando di creare la mia prima funzione memorizzata su MySQL. In questa funzione voglio restituire il timestamp della data e dell'ora corrente con 3 cifre di microsecondo come questa: YYYYMMDDHHMMSSZZZ
Come recuperare i microsecondi o millisecondi dall'ora attuale MySQL?
Io uso questo numero nel mio database per creare chiavi univoche per i miei record offline in modo che non si blocchino quando il mio i sistemi uniscono database da diversi server offline.
Quindi il mio primo tentativo per quella era SELECT CAST(MICROSECOND(NOW()) AS CHAR(3));
Ma restituisce 0.
Se provo SELECT CAST(MICROSECOND('2009-12-31 23:59:59.001210') AS CHAR(3));
Esso restituisce 121, come ho bisogno.
Quindi, come dire a MySQL che voglio conoscere i microsecondi del tempo corrente?
EDIT:
Considerate questo:
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;
Il risultato di:
INSERT INTO TABLEX (dateID, name) VALUES (CHAVE('TABLEX'), 'EASI');
Sarà, da CHAVE ('Tablex'):
KEY20130320151159666
Dove 666 sarà un numero casuale, ma vorrei che fosse il conteggio dei millisecondi effettivi dell'ora corrente, quindi non ho la chiave duplicata possibile.
Se solo potessi usare SHOW COLUMNS FROM @TableName WHERE FIELD_NAME LIKE '%_ID' LIMIT 1
e inserire che in un SELEZIONE non dinamico per ottenere il millisecondo dell'ultimo record di quel tavolo ...
Si tratta di un bug in MySQL versione 5.6.4 che ve siete su? –
Uso HostGator.com che utilizza MySQL 5.5.21 come detto in http://support.hostgator.com/articles/hosting-guide/hardware-software/what-software-and-program-versions-does-hostgator-offer – PSyLoCKe
La mia versione MySQL locale è 5.1.5 da Zend Server 5 CE – PSyLoCKe