如何在MySQL中的日期范围之间选择数据。我的datetime
专栏是24小时的祖鲁时间格式。
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;
尽管在这些时间段之间有数据,但不返回任何内容。我是否必须强制在'from'和'to'字段中datetime
输入值?
如何在MySQL中的日期范围之间选择数据。我的datetime
专栏是24小时的祖鲁时间格式。
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;
尽管在这些时间段之间有数据,但不返回任何内容。我是否必须强制在'from'和'to'字段中datetime
输入值?
Answers:
您需要更新日期格式:
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;
where game_date >= '2012-03-11' and game_date < '2012-05-12'
是定义日期范围的最精确方法,适用于从日期到亚秒级单位的任何时间精度级别。
这是使用日期函数的一种简单方法:
select *
from hockey_stats
where date(game_date) between date('2012-11-03') and date('2012-11-05')
order by game_date desc
date(game_date)
将根据计算得出的值而不是字段进行比较-导致不使用索引,并且每一行都被触摸(即全表扫描)!
game_date
。即使没有索引,该表的大小也必须适当调整,以显着改善性能。关于名称的某些信息hockey_stats
对我来说,这不是一个很大的表。
您可能需要使用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;
(如果game_date是字符串,则可能需要在其上使用STR_TO_DATE)
MySQL日期格式是:YMD。您正在使用Y / M / D。错了 修改您的查询。
如果您插入日期,例如Y / M / D,它将在数据库中插入空值。
如果您使用的是PHP,并且从表单中获得的日期类似于此Y / M / D,则可以使用语句替换它。
out_date=date('Y-m-d', strtotime(str_replace('/', '-', $data["input_date"])))
可以简单地查询为
select * from hockey_stats
where game_date between '2018-01-01' and '2018-01-31';
如果时间不重要,则此方法有效。
考虑时间的方式也如下:
select * from hockey_stats where (game_date between '2018-02-05 01:20:00' and '2018-02-05 03:50:00');
注意,这是针对MySQL服务器的。
您可以使用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;
或者只使用MySQL处理日期YYYY:MM:DD HH:mm:SS的格式,并将查询作为
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;
您必须搜索有关如何在数据库中插入该game_date数据的日期保护方法。例如,如果您插入的日期值是长日期还是短日期。
SELECT * FROM hockey_stats WHERE game_date >= "6/11/2018" AND game_date <= "6/17/2018"
您也可以使用BETWEEN:
SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"
就那么简单。
game_date
什么?