mysql - por - Seleccionar datos entre un rango de fecha/hora
generar rango de fechas sql (8)
¿Cómo selecciono datos entre un rango de fechas en MySQL? Mi columna de datetime
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 ''de'' y ''a'' a escribir el tipo de datetime
en la consulta?
Aquí hay una forma simple usando 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
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.
También considere el tiempo de la siguiente manera: seleccione * de hockey_stats donde (fecha_juego entre ''2018-02-05 01:20:00'' y ''2018-02-05 03:50:00''); Tenga en cuenta que esto es para el servidor MySQL.
Debe buscar la defensa de la fecha en la forma en que inserta los datos de game_date 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 puedes usar ENTRE :
SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"
simple como eso.
El formato de fecha de MySQL es este: YMD. Está utilizando Y / M / D. Eso es incorrecto modifica tu consulta
Si inserta la fecha como Y / M / D, se insertará un valor nulo en la base de datos.
Si está utilizando PHP y la fecha que obtiene del formulario es como este Y / M / D, puede reemplazarlo con el uso de la declaración.
out_date=date(''Y-m-d'', strtotime(str_replace(''/'', ''-'', $data["input_date"])))
Necesitas 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;
Probablemente necesites 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 necesites usar STR_TO_DATE en ella)
Puede STR_TO_DATE 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 que MySQL maneja con las fechas YYYY: 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;
Una forma sencilla:
select * from hockey_stats
where game_date >= ''2012-03-11'' and game_date <= ''2012-05-11''