Supongamos que tengo dos tablas de este modo:MySQL Join/Comparación en una columna DATETIME (<5.6.4 and > 5.6.4)
Events
ID (PK int autoInc), Time (datetime), Caption (varchar)
Position
ID (PK int autoinc), Time (datetime), Easting (float), Northing (float)
¿Es seguro, por ejemplo, una lista de todos los eventos y su posición si soy usando el campo Time
como mis criterios de unión? Es decir .:
SELECT E.*,P.* FROM Events E JOIN Position P ON E.Time = P.Time
OR, incluso simplemente comparar un valor de fecha y hora (teniendo en cuenta que el valor parametrizado puede contener la parte fraccional segundo - que MySQL siempre ha aceptado), por ejemplo,
SELECT E.* FROM Events E WHERE E.Time = @Time
entiendo MySQL (antes de la versión 5.6.4) sólo almacena los campos de fecha y hora SIN milisegundos. Así que supongo que esta consulta funcionaría bien. Sin embargo, a partir de la versión 5.6.4, he leído que MySQL ahora puede almacenar milisegundos con el campo de fecha y hora.
Suponiendo que los valores de fecha y hora se inserten mediante funciones como NOW()
, los milisegundos se truncan (< 5.6.4) lo que supondría permitir que la consulta anterior funcione. Sin embargo, con la versión 5.6.4 y posterior, esto podría NO funcionar. Estoy, y solo estaré interesado en la segunda precisión.
Si alguien puede responder a las siguientes preguntas sería muy apreciada:
- En general, ¿cómo se compara MySQL campos de fecha y hora uno contra el otro (considere la consulta anterior).
- ¿Es correcta la consulta anterior y utiliza índices en los campos de tiempo ? (MySQL < 5.6.4)
- ¿Hay alguna forma de excluir milisegundos? Es decir. al insertar y en condicional une/selecciona etc.? (MySQL> 5.6.4)
- ¿Funcionará la consulta de unión anterior? (MySQL> 5.6.4)
EDITAR
Sé que puedo emitir los datetimes, gracias por los que respondieron, pero estoy tratando de hacer frente a la raíz de la problema aquí (el hecho de que el tipo de almacenamiento/definición ha sido cambiado) y NO QUIERO usar funciones en mis consultas. Esto niega todo mi trabajo de optimización de consultas aplicando índices, etc., sin mencionar tener que reescribir todas mis consultas.
Edit2
¿Puede alguien por ahí sugerir una razón para no unirse en un campo DATETIME
usando segunda exactitud?
bien para su tercera cuestión, el uso de esta fecha (time_column) esto va a hacer el truco –
Creo 'NOW()' en 5.6.4 o posterior no será factor en milisegundos a menos que pase en un parámetro (0-6) que indica la "* precisión de segundos fraccionarios *", por lo que debe estar bien para la unión, siempre y cuando no pase los parámetros a 'AHORA()' Más [aquí] (http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_now) –
qué zona horaria se usa para DATETIME, dosis que la zona horaria tiene "saltos", como http: // stackoverflow .com/questions/6841333/why-is-restar-these-two-times-in-1927-giving-a-strange-result –