选择日期/时间范围之间的数据

cod*_*nob 65 mysql datetime

如何在MySQL中的日期范围之间选择数据.我的datetime专栏采用24小时zulu时间格式.

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;
Run Code Online (Sandbox Code Playgroud)

尽管在这些时间段之间有数据,但不返回任 我是否必须强制"从""到"字段中的值才能datetime在查询中键入?

Eug*_*eck 121

您需要更新日期格式:

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;
Run Code Online (Sandbox Code Playgroud)

  • 使用BETWEEN不是最佳实践,特别是因为MySQL现在支持**亚秒级时间精度**.使用23:59:59比一天结束还要短一整秒.`where game_date> ='2012-03-11'和game_date <'2012-05-12'`是定义日期范围的最精确方式,适用于从日期到亚秒单位的任何时间精度级别. (9认同)
  • 日期文字的格式为'YYYY-MM-DD HH:mm:SS' (6认同)
  • 我留给亚秒精度的读者使用的是亚秒精度的MySQL版本。MySQL 5.6.4或更高版本支持小数秒。(有关日期范围是针对哪种运动或目的的。) (5认同)
  • @Used_By_Already当在2013年回答此问题时,没有亚秒级MySQL-我还没有听说过曲棍球比赛在23:59到00:00之间以亚秒级开始时间开始。 (3认同)
  • 哪一个是日期,哪一个是月份? (2认同)
  • 这是为了准确性,而不是性能。正如已经提到的23:59:59并不是一天的结束。通过使用小于日期/时间范围上限的来巧妙而准确地避免此问题。`其中game_date&gt; ='2012-03-11'和game_date &lt;'2012-05-12'` (2认同)

Gor*_*off 17

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

select *
from hockey_stats
where date(game_date) between date('2012-11-03') and date('2012-11-05')
order by game_date desc
Run Code Online (Sandbox Code Playgroud)

  • 我是盲人还是性能杀手?`date(game_date)`将比较运行**计算值**,而不是字段 - 导致没有索引使用并且每一行都被触摸(即全表扫描)! (6认同)

ras*_*dcs 8

一个简单的方法:

select  * from  hockey_stats 
where  game_date >= '2012-03-11' and game_date  <= '2012-05-11'
Run Code Online (Sandbox Code Playgroud)


Mit*_*tha 7

可以通过简单的方式查询

select * from hockey_stats 
where game_date between '2018-01-01' and '2018-01-31';
Run Code Online (Sandbox Code Playgroud)

如果时间不成问题的话,这很有效。

考虑时间也遵循以下方式:

select * from hockey_stats where (game_date between '2018-02-05 01:20:00' and '2018-02-05 03:50:00');
Run Code Online (Sandbox Code Playgroud)

请注意,这是针对 MySQL 服务器的。


fth*_*lla 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;
Run Code Online (Sandbox Code Playgroud)

(如果game_date是字符串,则可能需要在其上使用STR_TO_DATE)