tipo rango por obtener mayor hora generar filtrar fechas fecha ejemplo datos consultar campo actual mysql date datetime

mysql - rango - ¿Cómo seleccionar la fecha de la columna de fecha y hora?



time mysql ejemplo (7)

Aunque todas las respuestas en la página devolverán el resultado deseado, todas tienen problemas de rendimiento. Nunca realice cálculos en los campos de la cláusula WHERE (incluido el cálculo de DATE() ) ya que ese cálculo debe realizarse en todas las filas de la tabla.

La construcción BETWEEN ... AND es inclusiva para ambas condiciones de borde, requiriendo especificar la sintaxis 23:59:59 en la fecha de finalización que tiene otros problemas (transacciones de microsegundos, que creo que MySQL no admitió en 2009 cuando la pregunta le preguntaron).

La forma correcta de consultar un campo de timestamp MySQL para un día en particular es verificar el valor de Mayor que Igual contra la fecha deseada, y Menor que el día posterior, sin especificar la hora.

WHERE datetime>=''2009-10-20'' AND datetime<''2009-10-21''

Este es el método de más rápido rendimiento, memoria más baja, que requiere menos recursos, y además admite todas las características de MySQL y casos de esquina, como la precisión de marca de tiempo de segundos. Además, es una prueba de futuro.

Tengo una columna de tipo "datetime" con valores como 2009-10-20 10:00:00

Me gustaría extraer la fecha de fecha y hora y escribir una consulta como:

SELECT * FROM data WHERE datetime = ''2009-10-20'' ORDER BY datetime DESC

¿Es la siguiente la mejor manera de hacerlo?

SELECT * FROM data WHERE datetime BETWEEN(''2009-10-20 00:00:00'' AND ''2009-10-20 23:59:59'') ORDER BY datetime DESC

Sin embargo, esto devuelve un conjunto de resultados vacío. ¿Alguna sugerencia?


Bueno, usar like in statement es la mejor opción donde datetime como ''2009-10-20%'', debería funcionar en este caso


Puede formatear la fecha y hora en la parte YMD:

DATE_FORMAT(datetime, ''%Y-%m-%d'')


Puedes usar:

DATEDIFF ( day , startdate , enddate ) = 0

O:

DATEPART( day, startdate ) = DATEPART(day, enddate) AND DATEPART( month, startdate ) = DATEPART(month, enddate) AND DATEPART( year, startdate ) = DATEPART(year, enddate)

O:

CONVERT(DATETIME,CONVERT(VARCHAR(12), startdate, 105)) = CONVERT(DATETIME,CONVERT(VARCHAR(12), enddate, 105))


Usar WHERE DATE(datetime) = ''2009-10-20'' tiene problemas de rendimiento . Como se indica here :

  • calculará DATE() para todas las filas, incluidas aquellas que no coinciden
  • hará que sea imposible usar un índice para la consulta

Use BETWEEN o > , < , = operadores que permiten usar un índice:

SELECT * FROM data WHERE datetime BETWEEN ''2009-10-20 00:00:00'' AND ''2009-10-20 23:59:59''

Actualización: el impacto en el uso de LIKE lugar de operadores en una columna indexada es alto . Estos son algunos resultados de prueba en una tabla con 1,176,000 filas:

  • usando datetime LIKE ''2009-10-20%'' => 2931ms
  • usando datetime >= ''2009-10-20 00:00:00'' AND datetime <= ''2009-10-20 23:59:59'' => 168ms

Al hacer una segunda llamada sobre la misma consulta, la diferencia es aún mayor: 2984ms vs 7ms (sí, ¡solo 7 milisegundos!). Encontré esto mientras reescribía un código viejo en un proyecto usando Hibernate.


forma simple y mejor para usar la función de fecha

ejemplo

SELECT * FROM data WHERE date(datetime) = ''2009-10-20''

O

SELECT * FROM data WHERE date(datetime ) >= ''2009-10-20'' && date(datetime ) <= ''2009-10-20''


WHERE DATE(datetime) = ''2009-10-20''

o prueba esto también y mira si funciona o no. Esto ayuda

WHERE datetime LIKE ''2009-10-20%''

Debes verificar si funciona o no.