93

如何在 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输入查询?

4

8 回答 8

160

您需要更新日期格式:

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;
于 2013-04-04T20:48:18.480 回答
22

这是使用日期函数的简单方法:

select *
from hockey_stats
where date(game_date) between date('2012-11-03') and date('2012-11-05')
order by game_date desc
于 2013-04-04T20:49:33.607 回答
10

一个简单的方法:

select  * from  hockey_stats 
where  game_date >= '2012-03-11' and game_date  <= '2012-05-11'
于 2017-08-08T21:01:50.747 回答
5

您可能需要使用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)

于 2013-04-04T20:59:45.987 回答
5

以一种简单的方式可以查询为

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 服务器的。

于 2018-02-01T14:41:34.217 回答
4

MySQL 日期格式是这样的:YMD。您正在使用 Y/M/D。那是错误的。修改您的查询。

如果您插入 Y/M/D 等日期,它将在数据库中插入空值。

如果您使用的是 PHP 并且您从表单中获取的日期是这样的 Y/M/D,您可以使用语句替换它。

out_date=date('Y-m-d', strtotime(str_replace('/', '-', $data["input_date"])))
于 2015-07-17T15:52:12.687 回答
2

您可以使用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;

于 2018-02-23T16:33:21.227 回答
2

您必须搜索日期保护您如何在数据库中插入该 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"

就那么简单。

于 2018-06-19T14:21:20.853 回答