数据表
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`userId` bigint(20) NOT NULL,
`fullName` varchar(64) NOT NULL,
`userType` varchar(16) NOT NULL,
`addedTime` datetime NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `t_user` VALUES ('1', '爽爽', '普通', '2018-01-21 10:20:09');
INSERT INTO `t_user` VALUES ('2', '贵贵', '普通', '2017-11-06 10:20:22');
INSERT INTO `t_user` VALUES ('3', '芬芬', 'vip', '2017-11-13 10:20:42');
INSERT INTO `t_user` VALUES ('4', '思思', 'vip', '2018-01-21 10:20:55');
INSERT INTO `t_user` VALUES ('5', '妍妍', 'vip', '2017-09-17 10:21:28');
1、查询今天以前的所有数据
to_days函数:返回从0000年(公元1年)至当前日期的总天数
select * from t_user where to_days(addedTime) <= to_days(now())
2、查询昨天的数据
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)函数:返回日期或日期/时间表达式的日期部分。
select * from t_user where DATE(addedTime) >= date_sub(curdate(), INTERVAL 7 DAY);
4、查询近30天的数据
SELECT * FROM t_user
WHERE date(addedtime) >= DATE_SUB(NOW(),INTERVAL 30 DAY)
5、查询当前这个月的数据
DATE_FORMAT(date,format) 函数:用于以不同的格式显示日期/时间数据。
SELECT * FROM t_user
WHERE DATE_FORMAT( addedTime, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' );
6、查询上个月的数据
PERIOD_DI**FF(period1, period2)**函数:返回两日期之间的差异。结果以月份计算。period1 和 period2 应采用相同的格式。格式:YYMM或YYYYMM
select * from t_user
where period_diff(date_format(now(),'%Y%m'), date_format(addedtime,'%Y%m')) = 1
7、查询本季度的数据
QUARTER(date):返回年份日期的季度,范围为1〜4。
select fullName,addedTime FROM t_user
where QUARTER(addedTime)=QUARTER(now()) and year(addedTime)=year(now())
8、查询上一季度的数据
select fullName,addedTime FROM t_user
where QUARTER(addedTime)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
9、查询今年的数据
year(date)函数:可以从指定日期值中来获取年份值。
select fullName,addedTime FROM t_user
where YEAR(addedTime)=YEAR(NOW());
10、查询去年的数据
select fullName,addedTime FROM t_user
where year(addedTime)=year(date_sub(now(),interval 1 year));
11、查询距离当前现在6个月的数据
select fullName,addedTime FROM t_user
where addedTime between date_sub(now(),interval 6 month) and now();
12、查询当前这周的数据
YEARWEEK(date):返回当前日期是在今年的第几周,还可以设置第二个参数,表示一周的开始是从哪天计算的
SELECT fullName,addedTime FROM t_user
WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now());
SELECT fullName,addedTime FROM t_user
WHERE YEARWEEK(addedTime) = YEARWEEK(now());
13、查询上周的数据
SELECT fullName,addedTime FROM t_user
WHERE YEARWEEK(date_format(addedTime,'%Y-%m-%d')) = YEARWEEK(now())-1;
14、查询上个月的数据
select fullName,addedTime FROM t_user
where date_format(addedTime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m');
15、查询当前月份的数据
select fullName,addedTime FROM t_user
where DATE_FORMAT(addedTime,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m');
select fullName,addedTime FROM t_user
where date_format(addedTime,'%Y-%m')=date_format(now(),'%Y-%m');
16、查询指定时间段的数据
select fullName,addedTime FROM t_user
where addedTime between '2017-1-1 00:00:00' and '2018-1-1 00:00:00';
select fullName,addedTime FROM t_user
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、获取系统当前时间的函数
select CURDATE();
select NOW();
4、获取时间差的函数
period_diff()
datediff(date1,date2)
timediff(time1,time2)
5、日期加减函数
date_sub()
date_add()
adddate()
addtime()
period_add(P,N)
6、时间格式转化函数
date_format(date, format) ,MySQL日期格式化函数date_format()
unix_timestamp()
str_to_date(str, format)
from_unixtime(unix_timestamp, format) ,MySQL时间戳格式化函数from_unixtime