it-swarm.com.de

CURRENT_TIMESTAMP in Millisekunden

Gibt es eine Möglichkeit, Millisekunden aus einem Zeitstempel in MySql oder PostgreSql herauszuholen (oder andere nur aus Neugier)?

SELECT CURRENT_TIMESTAMP
--> 2012-03-08 20:12:06.032572

Gibt es so etwas:

SELECT CURRENT_MILLISEC
--> 1331255526000

oder die einzige Alternative ist die DATEDIFF der era?

51
Gevorg

So ermitteln Sie den Unix-Zeitstempel in Sekunden in MySQL:

select UNIX_TIMESTAMP();

Details: http://dev.mysql.com/doc/refman/5.5/de/date-and-time-functions.html#function_unix-timestamp

Nicht getestet PostgreSQL, aber laut dieser Site sollte es funktionieren: http://www.raditha.com/postgres/timestamp.php

select round( date_part( 'Epoch', now() ) );
38
Billy Moon

Für MySQL (5.6+) können Sie Folgendes tun:

SELECT ROUND(UNIX_TIMESTAMP(CURTIME(4)) * 1000)

Welches wird zurückkommen (z. B.):

1420998416685 --milliseconds
45
Claudio Holanda

In mysql ist es möglich, die uuid-Funktion zum Extrahieren von Millisekunden zu verwenden.

select conv( 
            concat(
                   substring(uid,16,3), 
                   substring(uid,10,4), 
                   substring(uid,1,8))
                   ,16,10) 
            div 10000 
            - (141427 * 24 * 60 * 60 * 1000) as current_mills
from (select uuid() uid) as alias;

Ergebnis:

+---------------+
| current_mills |
+---------------+
| 1410954031133 |
+---------------+

Es funktioniert auch in älteren MySQL-Versionen!

Vielen Dank für diese Seite: http://rpbouman.blogspot.com.es/2014/06/mysql-extracting-timstamp-and-mac.html

31
jbaylina

In MySQL 5.7+ können Sie das ausführen 

select current_timestamp(6)

für mehr Details

https://dev.mysql.com/doc/refman/5.7/de/fractional-seconds.html

8
Ahmed

Die korrekte Methode, um Milisekunden von einem Zeitstempelwert in PostgreSQL entsprechend zu aktuelle Dokumentation zu extrahieren, ist:

SELECT date_part('milliseconds', current_timestamp);

--OR

SELECT EXTRACT(MILLISECONDS FROM current_timestamp);

with Returns: Das Sekundenfeld, einschließlich Bruchteilen, multipliziert mit 1000. Beachten Sie, dass dies volle Sekunden einschließt.

7
Falco

Benutzen:

Select curtime(4);

Dies gibt Ihnen Millisekunden.

6
TanuAD

In PostgreSQL können Sie Folgendes verwenden: 

SELECT extract(Epoch from now());

auf MySQL:

SELECT unix_timestamp(now());
4
aleroot

Hier ein Ausdruck, der für MariaDB und MySQL> = 5.6 funktioniert:

SELECT (UNIX_TIMESTAMP(NOW()) * 1000000 + MICROSECOND(NOW(6))) AS unix_now_in_microseconds;

Dies beruht auf der Tatsache, dass NOW () immer die gleiche Zeit in einer Abfrage zurückgibt ; Es ist möglich, dass eine einfache UNIX_TIMESTAMP() auch funktionieren würde, ich bin mir nicht sicher basierend auf der Dokumentation . Es erfordert außerdem MySQL> = 5.6 für das neue Präzisionsargument für die Funktion NOW() (MariaDB funktioniert auch).

4
Walter Mundt

Keine dieser Antworten löst das Problem in postgreSQL, d. H.

abrufen des Unix-Zeitstempels eines Datumsfeldes in Millisekunden

Ich hatte das gleiche Problem und testete die verschiedenen vorherigen Antworten ohne zufriedenstellendes Ergebnis.

Schließlich habe ich einen wirklich einfachen Weg gefunden, wahrscheinlich den einfachsten:

SELECT (EXTRACT (Epoch FROM <date_column>::timestamp)::float*1000 as unix_tms
FROM <table>

nämlich:

  • Wir extrahieren pgSQL Epoch, dh unix-Zeitstempel in Floating-Sekunden aus unserer in Zeitstempel-Vorsicht gegossenen Spalte. Sehen )
  • dann gießen wir es in float und multiplizieren es mit 1000, um den Wert in Millisekunden zu erhalten
4
Rémi Becheras

Das größte Missverständnis in MySQL mit Zeitstempeln ist, dass MySQL standardmäßig Zeitstempel zurückgibt und speichert, ohne einen Bruchteil .

SELECT current_timestamp()  => 2018-01-18 12:05:34

die als Sekundenstempel umgewandelt werden kann

SELECT UNIX_TIMESTAMP(current_timestamp()) => 1516272429

Bruchteil hinzufügen:

SELECT current_timestamp(3) => 2018-01-18 12:05:58.983

die als Mikrosekunden-Zeitstempel konvertiert werden kann

SELECT CAST( 1000*UNIX_TIMESTAMP(current_timestamp(3)) AS UNSIGNED INTEGER) ts => 1516272274786

Es gibt wenige Tricks beim Speichern in Tabellen. Wenn dein Tisch so erstellt wurde

    CREATE TABLE `ts_test_table` (
      `id` int(1) NOT NULL,
      `not_fractional_timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

als MySQL wird keinen Bruchteil darin speichern:

    id, not_fractional_timestamp
    1,  2018-01-18 11:35:12

Wenn Sie einen Bruchteil in Ihre Tabelle einfügen möchten, müssen Sie die Tabelle auf andere Weise erstellen:

    CREATE TABLE `ts_test_table2` (
      `id` int(1) NOT NULL,
      `some_data` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
      `fractional_timestamp` timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

das führt zum gewünschten Ergebnis:

    id, some_data, fractional_timestamp
    1,  8,         2018-01-18 11:45:40.811

die current_timestamp () - Funktion darf Werte bis zu 6 erhalten, aber ich habe herausgefunden (zumindest in meiner installierten MySQL 5.7.11-Version unter Windows), dass die Bruchgenauigkeit 6 zu einem konstanten Wert von 3 Stellen am Ende führt. in meinem Fall 688

    id, some_data, fractional_timestamp
    1,  2,         2018-01-18 12:01:54.167688
    2,  4,         2018-01-18 12:01:58.893688

Das bedeutet, dass die wirklich nutzbare Zeitstempelgenauigkeit von MySQL plattformabhängig ist:

  • unter Windows: 3
  • unter Linux: 6
4
Igor

Am einfachsten fand ich die aktuelle Zeit in Millisekunden in MySql:

SELECT (UNIX_TIMESTAMP(NOW(3)) * 1000)

Seit MySql 5.6.

3
Yuval

Ich hatte das Bedürfnis, mich weiter zu verfeinern, also in MySQL:

Aktueller Zeitstempel in Millisekunden:

floor(unix_timestamp(current_timestamp(3)) * 1000)

Zeitstempel in Millisekunden von der angegebenen Datumszeit (3):

floor(unix_timestamp("2015-04-27 15:14:55.692") * 1000)

Zeitstempel in Millisekunden nach Datum (3) umrechnen:

from_unixtime(1430146422456 / 1000)

Datumszeit (3) in Zeitstempel in Millisekunden umrechnen:

floor(unix_timestamp("2015-04-27 14:53:42.456") * 1000)
1
Yaniv

In MariaDB können Sie verwenden

SELECT NOW(4);

Um milisecs zu bekommen. hier auch.

1
Benvorth

In PostgreSQL verwenden wir diesen Ansatz:

SELECT round(EXTRACT (Epoch FROM now())::float*1000)
0
Chebevara

Für Millisekunden wie folgt vorgehen:

select round(date_format(CURTIME(3), "%f")/1000)

Sie können Mikrosekunden wie folgt erhalten:

select date_format(CURTIME(6), "%f")
0
Justin Levene

Ich war kürzlich mit demselben Problem konfrontiert und habe ein kleines Github-Projekt erstellt, das eine neue Mysql-Funktion UNIX_TIMESTAMP_MS() enthält, die den aktuellen Zeitstempel in Millisekunden zurückgibt.

Sie können auch Folgendes tun:

SELECT UNIX_TIMESTAMP_MS(NOW(3)) oder SELECT UNIX_TIMESTAMP_MS(DateTimeField)

Das Projekt befindet sich hier: https://github.com/silviucpp/unix_timestamp_ms

Zum Kompilieren müssen Sie einfach make compile im Projektstamm ausführen.

Dann müssen Sie nur die gemeinsam genutzte Bibliothek in /usr/lib/mysql/plugin/ kopieren (oder was auch immer der Plugin-Ordner auf Ihrem Computer ist.)

Danach einfach eine mysql-Konsole öffnen und ausführen:

CREATE FUNCTION UNIX_TIMESTAMP_MS RETURNS INT SONAME 'unix_timestamp_ms.so';

Ich hoffe, das wird helfen, Silviu

0
silviu