MySQL
Tiempo con precisión subsecundaria.
Buscar..
Observaciones
Debe estar en la versión 5.6.4 o posterior de MySQL para declarar columnas con tipos de datos de fracciones de segundo.
Por ejemplo, DATETIME(3)
le dará una resolución de milisegundos en sus marcas de tiempo, y TIMESTAMP(6)
le dará una resolución de microsegundos en una marca de tiempo de estilo * nix.
Lea esto: http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
NOW(3)
le dará la actualidad del sistema operativo de su servidor MySQL con una precisión de milisegundos.
(Tenga en cuenta que la aritmética fraccional interna de MySQL, como * 0.001, siempre se maneja como punto flotante de doble precisión IEEE754, por lo que es poco probable que pierda precisión antes de que el Sol se convierta en una estrella enana blanca).
Obtén la hora actual con milisegundos de precisión.
SELECT NOW(3)
Hace el truco.
Obtenga la hora actual en un formulario que se parece a una marca de tiempo de Javascript.
Las marcas de tiempo de Javascript se basan en el venerable UNIX time_t
data type y muestran el número de milisegundos desde 1970-01-01 00:00:00
UTC.
Esta expresión obtiene la hora actual como un entero de marca de tiempo de Javascript. (Lo hace correctamente, independientemente de la configuración actual de time_zone.)
ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)
Si tiene valores de TIMESTAMP
almacenados en una columna, puede recuperarlos como marcas de tiempo de Javascript enteras utilizando la función UNIX_TIMESTAMP ().
SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)
Si su columna contiene columnas DATETIME
y las recupera como marcas de tiempo de Javascript, esas marcas de tiempo se compensarán con el desplazamiento de zona horaria de la zona horaria en la que están almacenados.
Crear una tabla con columnas para almacenar sub-segundo tiempo.
CREATE TABLE times (
dt DATETIME(3),
ts TIMESTAMP(3)
);
crea una tabla con campos de fecha / hora de precisión de milisegundos.
INSERT INTO times VALUES (NOW(3), NOW(3));
inserta una fila que contiene valores de NOW()
con una precisión de milisegundos en la tabla.
INSERT INTO times VALUES ('2015-01-01 16:34:00.123','2015-01-01 16:34:00.128');
Inserta valores específicos de milisegundos de precisión.
Tenga en cuenta que debe usar NOW(3)
lugar de NOW()
si usa esa función para insertar valores de tiempo de alta precisión.
Convertir un valor de fecha / hora de precisión de milisegundos en texto.
%f
es el especificador de formato de precisión fraccional para la función DATE_FORMAT () .
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f')
muestra un valor como 2016-11-19 09:52:53.248000
con microsegundos fraccionarios. Debido a que usamos NOW(3)
, los tres dígitos finales en la fracción son 0.
Almacenar una marca de tiempo de Javascript en una columna TIMESTAMP
Si tiene un valor de marca de tiempo de Javascript, por ejemplo 1478960868932
, puede convertirlo en un valor de tiempo fraccional de MySQL como este:
FROM_UNIXTIME(1478960868932 * 0.001)
Es fácil de usar ese tipo de expresión para almacenar su marca de tiempo de Javascript en una tabla MySQL. Hacer esto:
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001))
(Obviamente, querrás insertar otras columnas).