Tengo una pregunta: ¿Es posible seleccionar de una base de datos MySQL comparando una cadena DATE "2010-04-29" con cadenas que se almacenan como DATETIME (2010-04-29 10:00)?
Tengo un selector de fecha que filtra datos y me gustaría consultar la tabla por el campo DATETIME como este:
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.
mysql
datetime
comparison
Manny Calavera
fuente
fuente
startTime
está indexada.Si desea seleccionar todas las filas donde la parte DATE de una columna DATETIME coincide con un cierto literal, no puede hacerlo así:
porque MySQL no puede comparar un DATE y un DATETIME directamente. Lo que hace MySQL, extiende el literal DATE dado con el tiempo '00: 00: 00 '. Entonces tu condición se vuelve
¡Ciertamente no es lo que quieres!
La condición es un rango y, por lo tanto, debe darse como rango. Hay varias posibilidades:
Existe una pequeña posibilidad de que el primero se equivoque, cuando su columna DATETIME usa una resolución de subsegundos y hay una cita a las 23:59:59 + épsilon. En general, sugiero utilizar la segunda variante.
Ambas variantes pueden usar un índice en startTime que será importante cuando la tabla crezca.
fuente
date()
,year()
,datediff()
o cualquiera similar)00:00:00
. ahora mis resultados tienen sentidoSELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
O
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
fuente
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
esto para el formato de fecha y hora en mysql usando
DATE_FORMAT(date,format)
.fuente
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
ayuda, puede convertir los valores como
DATE
antes de comparar.fuente
Puede convertir el campo DATETIME en DATE como:
SELECT * FROM `calendar` WHERE CAST(startTime AS DATE) = '2010-04-29'
Esto es muy eficaz.
fuente
startTime
está indexadoSELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
También puede usar operadores de comparación en fechas MySQL si desea encontrar algo antes o después. Esto se debe a que están escritos de tal manera (de mayor valor a menor con ceros a la izquierda) que una simple clasificación de cadena los clasificará correctamente.
fuente