数据表

  1. DROP TABLE IF EXISTS `t_user`;
  2. CREATE TABLE `t_user` (
  3. `userId` bigint(20) NOT NULL,
  4. `fullName` varchar(64) NOT NULL,
  5. `userType` varchar(16) NOT NULL,
  6. `addedTime` datetime NOT NULL,
  7. PRIMARY KEY (`userId`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  9. INSERT INTO `t_user` VALUES ('1', '爽爽', '普通', '2018-01-21 10:20:09');
  10. INSERT INTO `t_user` VALUES ('2', '贵贵', '普通', '2017-11-06 10:20:22');
  11. INSERT INTO `t_user` VALUES ('3', '芬芬', 'vip', '2017-11-13 10:20:42');
  12. INSERT INTO `t_user` VALUES ('4', '思思', 'vip', '2018-01-21 10:20:55');
  13. INSERT INTO `t_user` VALUES ('5', '妍妍', 'vip', '2017-09-17 10:21:28');

1、查询今天以前的所有数据

to_days函数:返回从0000年(公元1年)至当前日期的总天数

  1. select * from t_user where to_days(addedTime) <= to_days(now())

2、查询昨天的数据

  1. SELECT * from t_user where TO_DAYS(now()) - TO_DAYS(addedTime) = 1

3、查询近7天的数据

date_sub(date, interval expr type)函数:从特定日期减去指定的时间间隔
date_add(**date, interval expr type**)函数:从特定日期加上指定时间间隔
curdate()函数:返回当前日期
curtime()函数:返回当前时间
date(date)函数:返回日期或日期/时间表达式的日期部分。

  1. select * from t_user where DATE(addedTime) >= date_sub(curdate(), INTERVAL 7 DAY);

4、查询近30天的数据

  1. SELECT * FROM t_user
  2. WHERE date(addedtime) >= DATE_SUB(NOW(),INTERVAL 30 DAY)

5、查询当前这个月的数据

DATE_FORMAT(date,format) 函数:用于以不同的格式显示日期/时间数据。

  1. SELECT * FROM t_user
  2. WHERE DATE_FORMAT( addedTime, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' );

6、查询上个月的数据

PERIOD_DI**FF(period1, period2)**函数:返回两日期之间的差异。结果以月份计算。period1 和 period2 应采用相同的格式。格式:YYMM或YYYYMM

  1. select * from t_user
  2. where period_diff(date_format(now(),'%Y%m'), date_format(addedtime,'%Y%m')) = 1

7、查询本季度的数据

QUARTER(date):返回年份日期的季度,范围为1〜4。

  1. select fullName,addedTime FROM t_user
  2. where QUARTER(addedTime)=QUARTER(now()) and year(addedTime)=year(now())

8、查询上一季度的数据

  1. select fullName,addedTime FROM t_user
  2. where QUARTER(addedTime)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));

9、查询今年的数据

year(date)函数:可以从指定日期值中来获取年份值。

  1. select fullName,addedTime FROM t_user
  2. where YEAR(addedTime)=YEAR(NOW());

10、查询去年的数据

  1. select fullName,addedTime FROM t_user
  2. where year(addedTime)=year(date_sub(now(),interval 1 year));

11、查询距离当前现在6个月的数据

  1. select fullName,addedTime FROM t_user
  2. where addedTime between date_sub(now(),interval 6 month) and now();

12、查询当前这周的数据

YEARWEEK(date):返回当前日期是在今年的第几周,还可以设置第二个参数,表示一周的开始是从哪天计算的

  1. SELECT fullName,addedTime FROM t_user
  2. WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now());
  1. SELECT fullName,addedTime FROM t_user
  2. WHERE YEARWEEK(addedTime) = YEARWEEK(now());

13、查询上周的数据

  1. SELECT fullName,addedTime FROM t_user
  2. WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now())-1;

14、查询上个月的数据

  1. select fullName,addedTime FROM t_user
  2. where date_format(addedTime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');

15、查询当前月份的数据

  1. select fullName,addedTime FROM t_user
  2. where DATE_FORMAT(addedTime,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');
  1. select fullName,addedTime FROM t_user
  2. where date_format(addedTime,'%Y-%m')=date_format(now(),'%Y-%m');

16、查询指定时间段的数据

  1. select fullName,addedTime FROM t_user
  2. where addedTime between '2017-1-1 00:00:00' and '2018-1-1 00:00:00';
  1. select fullName,addedTime FROM t_user
  2. where addedTime >='2017-1-1 00:00:00' and addedTime < '2018-1-1 00:00:00';

归纳

1、查询时间段内的数据,一般可以用between and <> 来指定时间段。
2、mysql的时间字段类型有:datetime,timestamp,date,time,year。
3、获取系统当前时间的函数

  1. select CURDATE();
  2. select NOW();

4、获取时间差的函数

  1. period_diff()
  2. datediff(date1,date2)
  3. timediff(time1,time2)

5、日期加减函数

  1. date_sub()
  2. date_add()
  3. adddate()
  4. addtime()
  5. period_add(P,N)

6、时间格式转化函数

  1. date_format(date, format) MySQL日期格式化函数date_format()
  2. unix_timestamp()
  3. str_to_date(str, format)
  4. from_unixtime(unix_timestamp, format) MySQL时间戳格式化函数from_unixtime