numero length convertir convert cast mysql datetime comparison

length - mysql convertir string a numero



MySQL compara cadena de FECHA con cadena del campo DATETIME (6)

Tengo una pregunta: ¿es posible seleccionar de una base de datos MySQL comparando una cadena DATE "2010-04-29" con cadenas almacenadas como DATETIME (2010-04-29 10:00)?

Tengo un selector de fecha que filtra los datos y me gustaría consultar la tabla por el campo DATETIME de esta manera:

SELECT * FROM `calendar` WHERE startTime = ''2010-04-29''"

... y me gustaría obtener la fila que tiene el valor DATETIME de "2010-04-29 10:00".

¿Alguna sugerencia? Gracias.


Si desea seleccionar todas las filas donde la parte DATE de una columna DATETIME coincide con un cierto literal, no puede hacerlo así:

WHERE startTime = ''2010-04-29''

porque MySQL no puede comparar un DATE y un DATETIME directamente. Lo que MySQL hace, extiende el literal FECHA dado con el tiempo ''00: 00: 00 ''. Entonces tu condición se vuelve

WHERE startTime = ''2010-04-29 00:00:00''

¡Ciertamente no es lo que quieres!

La condición es un rango y, por lo tanto, se debe dar como rango. Hay varias posibilidades:

WHERE startTime BETWEEN ''2010-04-29 00:00:00'' AND ''2010-04-29 23:59:59'' WHERE startTime >= ''2010-04-29'' AND startTime < (''2010-04-29'' + INTERVAL 1 DAY)

Existe una pequeña posibilidad de que la primera sea incorrecta: cuando su columna DATETIME usa una resolución de segundo y hay una cita a las 23:59:59 + epsilon. En general, sugiero usar la segunda variante.

Ambas variantes pueden usar un índice en startTime que será importante cuando la tabla crezca.


Use lo siguiente:

SELECT * FROM `calendar` WHERE DATE(startTime) = ''2010-04-29''

Solo como referencia tengo una tabla de registro de 2 millones, ejecuté una consulta similar. La respuesta de Salils tomó 4.48 segundos, lo anterior tomó 2.25 segundos.

Entonces, si la mesa es GRANDE, sugeriría esto más bien.


SELECT * FROM `calendar` WHERE DATE(startTime) = ''2010-04-29'';

ayuda, puede convertir los valores como DATE antes de comparar.


SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = ''2010-04-29''"

O

SELECT * FROM `calendar` WHERE DATE(startTime) = ''2010-04-29''


SELECT * FROM `calendar` WHERE startTime like ''2010-04-29%''

También puede usar operadores de comparación en las fechas de MySQL si quiere encontrar algo después o antes. Esto se debe a que están escritos de tal manera (de mayor a menor con ceros a la izquierda) que una ordenación de cadena simple los clasificará correctamente.


SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT(''2014-11-24 10:48:09'',''%Y-%m-%d %H:%i:%s'')

esto para formato de fecha y hora en mysql usando DATE_FORMAT(date,format) .