¿Cómo selecciono datos entre un rango de fechas en MySQL? Mi datetime
columna está en formato de hora zulú de 24 horas.
select * from hockey_stats
where game_date between '11/3/2012 00:00:00' and '11/5/2012 23:59:00'
order by game_date desc;
No devuelve nada a pesar de tener datos entre estos períodos de tiempo. ¿Tengo que forzar los valores en los campos 'desde' y 'hasta' para datetime
escribir la consulta?
game_date
?Respuestas:
Necesita actualizar el formato de fecha:
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and '2012-05-11 23:59:00' order by game_date desc;
fuente
where game_date >= '2012-03-11' and game_date < '2012-05-12'
es la forma más precisa de definir un rango de fechas y funcionará para cualquier nivel de precisión de tiempo desde la fecha hasta las unidades inferiores a un segundo.A continuación, se muestra una forma sencilla de utilizar la función de fecha:
select * from hockey_stats where date(game_date) between date('2012-11-03') and date('2012-11-05') order by game_date desc
fuente
date(game_date)
hará que la comparación se ejecute con un valor calculado , no con un campo, lo que dará como resultado que no se use el índice y que se toquen todas las filas (es decir, escaneo completo de la tabla).game_date
. Incluso sin un índice, la tabla tendría que tener un tamaño moderado para una diferencia notable en el rendimiento. Algo en el nombrehockey_stats
me sugiere que esta no es una mesa realmente grande.Una forma sencilla:
select * from hockey_stats where game_date >= '2012-03-11' and game_date <= '2012-05-11'
fuente
Probablemente necesite usar la función STR_TO_DATE :
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
(si game_date es una cadena, es posible que debas usar STR_TO_DATE en ella)
fuente
El formato de fecha de MySQL es este: YMD. Estás usando Y / M / D. Eso está mal. modificar su consulta.
Si inserta la fecha como Y / M / D, se insertará un valor nulo en la base de datos.
Si está usando PHP y la fecha que está obteniendo del formulario es como este Y / M / D, puede reemplazarlo usando la declaración.
fuente
De forma sencilla se puede consultar como
select * from hockey_stats where game_date between '2018-01-01' and '2018-01-31';
Esto funciona si el tiempo no es una preocupación.
Teniendo en cuenta el tiempo también sigue de la siguiente manera:
select * from hockey_stats where (game_date between '2018-02-05 01:20:00' and '2018-02-05 03:50:00');
Tenga en cuenta que esto es para el servidor MySQL.
fuente
Puede utilizar la función STR_TO_DATE y pasar sus propios parámetros de fecha según el formato que haya publicado:
select * from hockey_stats where game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s') and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') order by game_date desc;
O simplemente use el formato con el que MySQL maneja las fechas AAAA: MM: DD HH: mm: SS y tenga la consulta como
select * from hockey_stats where game_date between '2012-03-11 00:00:00' and'2012-05-11 23:59:00' order by game_date desc;
fuente
Debe buscar la fecha para defender cómo inserta los datos de la fecha del juego en su base de datos ... por ejemplo, si insertó el valor de la fecha en una fecha larga o corta.
SELECT * FROM hockey_stats WHERE game_date >= "6/11/2018" AND game_date <= "6/17/2018"
También puede utilizar BETWEEN :
SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"
simple como eso.
fuente