如何在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;
尽管在这些时间段之间有数据,但什么也不返回。我是否必须强制将'中的值从'和'改为'字段到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;
尽管在这些时间段之间有数据,但什么也不返回。我是否必须强制将'中的值从'和'改为'字段到datetime
类型的查询中?
您需要更新的日期格式:
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;
哪一个是日期,哪一个是这里的月份? – Arun 2015-10-14 18:18:11
日期文字的格式为'YYYY-MM-DD HH:mm:SS' – 2015-10-14 19:43:57
使用BETWEEN并不是最佳做法,尤其是因为MySQL现在支持**亚秒的时间精度**。使用23:59:59比一天结束时短一整秒。 '其中game_date> ='2012-03-11'和game_date <'2012-05-12''是定义日期范围的最精确的方式,并可用于从日期到次秒单位的任何时间精度级别。 – 2017-10-21 02:34:01
下面是一个使用日期函数的简单方法:
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)'将比较运行于** calulcated值**,而不是字段 - 导致没有索引使用,并且每一行都被触摸(即全表扫描)! – 2013-04-04 20:57:36
@EugenRieck。 。 。一般来说,假设有'game_date'上的索引是正确的。即使没有索引,该表格也必须适当调整大小,以显着改善性能。关于“hockey_stats”这个名字的一些信息告诉我,这不是一个真正的大桌子。 – 2013-04-04 20:59:38
您可能需要使用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日期格式是这样的:Y-M-D。您正在使用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 >= '2012-03-11' and game_date <= '2012-05-11'
以简单的方式就可以查询作为
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'?其日期时间为 – hjpotter92 2013-04-04 20:48:35
。我想我明白了为什么我很困惑。我为mysql使用* toad软件*,默认情况下它使用我在日期范围中使用的格式呈现日期,这就是我使用相同的原因。所以问题是我在我的范围内提供的日期格式。 – codingknob 2013-04-04 21:02:52
如果我使用Eugen Rieck提供的格式,它按预期工作。 – codingknob 2013-04-04 22:13:17