MySql根据时间段进行数据查询大全

  本文主要考虑平时对数据进行查找,用到最频繁的就是根据时间进行数据查找。
  在写sql之前强调以下两点:
  1.sql中一天的时间范围为00:00:00~23:59:59,sql中的时间没有24:00:00这个时间点的概念。
  2.在sql查询时WHERE time BETWEEN ‘2018-06-06’ AND ‘2018-06-07’这时查询到的时间范围为2018-06-06 00:00:00~2018-06-07 00:00:00,这样查询的时间就不是一天的时间了,而将2018-06-07 00:00:00这个时间点也包含了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//返回一个天数
TO_DAYS()函数

//今天
select * from 表名 where to_days(时间字段名) = to_days(now());

//昨天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1;

//前天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 2;

//今天+昨天+前天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 2;

//查询2月到5月所有的时间点
SELECT * FROM `student` WHERE DATE_FORMAT(time,'%Y-%m')>='2019-02' AND DATE_FORMAT(time,'%Y-%m')<='2019-05';

//查询2月的所有时间点
SELECT * FROM `student` WHERE DATE_FORMAT(time,'%Y-%m')='2019-02';

//区间段查询(查询11~12包括11、12当天的所有时间点)yyyy-MM-dd HH:mm:ss(java中格式)
SELECT * FROM `student` WHERE DATE_FORMAT(时间字段名,'%Y-%m-%d')>='2019-02-11' AND DATE_FORMAT(时间字段名,'%Y-%m-%d')<='2019-02-12';
SELECT * FROM `student` WHERE DATE_FORMAT(时间字段名,'%Y-%m-%d %H:%i:%s')>='2019-02-11 00:00:00' AND DATE_FORMAT(时间字段名,'%Y-%m-%d %H:%i:%s')<'2019-02-13 00:00:00';

//区间段查询(查询11~12包括11、12当天的所有时间点)
SELECT * FROM `student` WHERE time BETWEEN '2019-02-11' AND '2019-02-12 23:59:59';
最后两条sql是时间查询万能的sql,使用任意一条即可