Gewusst wie: abrufen von Mikrosekunden oder Millisekunden, MySQL aktuelle Zeit?
Ich versuche, meine erste gespeicherte Funktion auf MySQL. In dieser Funktion möchte ich zu dem zurückkehren der Zeitstempel des aktuellen Datums und der Zeit mit 3 Mikrosekunden Ziffern wie diese: YYYYMMDDHHMMSSZZZ
Ich diese Nummer in meine Datenbank zu erstellen, der eindeutige Schlüssel für meine Platten offline, so dass Sie nicht Abstürzen, wenn meine Systeme Zusammenführen von Datenbanken aus verschiedenen offline-Servern.
Also mein Erster Versuch war SELECT CAST(MICROSECOND(NOW()) AS CHAR(3));
Aber es gibt 0 zurück.
Wenn ich versuche SELECT CAST(MICROSECOND('2009-12-31 23:59:59.001210') AS CHAR(3));
Gibt es 121, wie ich brauche.
So, Wie zu sagen, MySQL, ich will wissen, der Mikrosekunden für die aktuelle Uhrzeit?
EDIT:
Bedenken Sie:
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;
Das Ergebnis:
INSERT INTO TABLEX (dateID, name) VALUES (CHAVE('TABLEX'), 'EASI');
Werden, von CHAVE('TABLEX'):
KEY20130320151159666
Wo 666 wird eine zufällige Zahl, aber ich wünschte, es wäre real Millisekunden zählen der aktuellen Zeit, so habe ich nicht die Möglichkeit, duplizierte Schlüssel.
Wenn nur ich könnte mit SHOW COLUMNS FROM @TableName WHERE FIELD_NAME LIKE '%_ID' LIMIT 1
und einfügen in eine nicht-dynamic WÄHLEN, um die Millisekunde des letzten Datensatz der Tabelle...
Ich benutze HostGator.com die Verwendung von MySQL 5.5.21, wie gesagt, in support.hostgator.com/articles/hosting-guide/hardware-software/...
Meine lokale MySQL version 5.1.5 von Zend Server CE-5
InformationsquelleAutor Please_Dont_Bully_Me_SO_Lords | 2013-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
MySQL 5.6 unterstützt die Millisekunden-Präzision in der
DATEPART
Funktion.versuchen
select sysdate(6)
zurück2013-04-16 13:47:56.273434
und
select sysdate(3)
zurück2013-04-16 13:47:56.273
InformationsquelleAutor ali
Werfen Sie einen Blick auf, was MySQL sagt(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.
So müssen Sie es nicht als date-Wert, sondern als eine einfache floating-point-Wert.
Ich bin nicht auf der Suche nach Lagerung sind, aber nur zum abrufen von system-current-datetime-wie gesagt, in der Frage. Ich werde speichern Sie es als string-Wert YYYYMMDDHHMMSSZZZ
Wenn Ihre MySQL-version ist nicht neu genug, es werden nicht auf jedem Teil kleiner 1 Sekunde. Es ist besser, verwenden Sie Ihre server-side-scripting-Sprache, um es abzurufen und dann in der Abfrage.
Also ich werde nicht in der Lage zu erstellen, dass die gespeicherten Funktion 🙁
InformationsquelleAutor aram90
Für mysql 5.6
Funktioniert Super auf 5.6.32 für mich.
InformationsquelleAutor javamonk
Dies ist meine Lösung für Millisekunde-management.
Benutze ich nur "text" - Datentyp wie Daten speichern, führen Sie zur Kontrolle von Daten, die Validierung von selbst.
CREATE TABLE
time_test
(id
INT NOT NULL AUTO_INCREMENT ,start_time
TEXT NULL ,stop_time
TEXT NULL ,difference
TEXT NULL ,ranking
INT NULL ,PRIMARY KEY (
id
))
INSERT INTO
time_test
VALUES (NULL, '10:10:10.111111', '10:10:10.456789',NULL,NULL)INSERT INTO
time_test
VALUES (NULL, '10:10:10.111111', '10:10:20.777777',NULL,NULL)INSERT INTO
time_test
VALUES (NULL, '10:10:10.111111', '10:10:01.999999',NULL,NULL)Jetzt können Sie berechnen, wie dies
Jetzt können Sie berechnen, wie dies
Sortieren
SELECT * FROM
time_test
ORDER BY-ZEIT( stop_time )Zeit berechnen diff, sehr gut für mich.
WÄHLEN Sie * aus, TIMEDIFF(stop_time,start_time) von
time_test
Zeit berechnen diff, sehr gut für mich.
kann auch calcuate und speichern können Sie wieder schneiden Sie eine Zeichenfolge, indem Sie sich.
update
time_test
set-Differenz = concat(TIMEDIFF(stop_time,start_time), MIKROSEKUNDE(TIMEDIFF(stop_time,start_time) ))auch kann calcuate und speichern können Sie wieder schneiden Sie eine Zeichenfolge, indem Sie sich.
du auch tun, ranking, indem Sie diesen Befehl:
SET @r:=0;
UPDATE
time_test
SET-ranking= (@r:= (@r+1)) ORDER BYdifference
ASC;Sie auch tun-ranking von diesem Befehl:
InformationsquelleAutor Sueb Tarasiri