MySQL中按照时间条件进行查询
前言
在SQL查询中,经常会用到使用时间/日期
作为查询条件,所以博主就列举了各种通过时间作为条件的例子
SQL模拟表
为方便下面SQL查询语句的验证,先提供一份模拟表
1 | CREATE TABLE regedit ( |
时间条件查询
查询数据库中存在的数据
【单位:分钟】
- 查询:10分钟前的数据
1
SELECT * FROM regedit WHERE create_time BETWEEN date_add(now(), interval - 600 SECOND) AND NOW()
【单位:日】
- 查询:今天的数据
1
2
3
4
5SELECT * FROM regedit r WHERE DATE(r.create_time) = DATE(NOW())
或
SELECT * FROM regedit r WHERE TO_DAYS(r.create_time) = TO_DAYS(NOW())
或
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = 0 - 查询:未来第n天的数据
1
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = n
- 查询:过去第n天的数据
1
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = -n
- 查询:未来n天的所有数据
1
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) < n AND DATEDIFF(r.create_time, NOW()) >= 0
- 查询:过去n天的所有数据(包含当天)
1
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) <= 0 AND DATEDIFF(r.create_time, NOW()) > -n;
- 查询:过去n天的所有数据(不包含当天)
1
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) < 0 AND DATEDIFF(r.create_time, NOW()) > -n;
- 查询:大于前7天,小于当前时间的数据(前7天)
1
2
3SELECT * FROM regedit r WHERE DATE(r.create_time) BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()
或
SELECT * FROM regedit r WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(r.create_time); - 查询:大于前7天的数据(近7天)
1
SELECT * FROM regedit r WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(r.create_time)
- 查询:大于前30天,小于后30天的数据(近30天)
1
2
3SELECT * FROM regedit r WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= DATE(r.create_time)
或
SELECT * FROM regedit r WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(r.create_time); - 查询:明天的数据
1
2
3SELECT * FROM regedit r WHERE DATE(r.create_time) = DATE_ADD(CURDATE(), INTERVAL 1 DAY)
或
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = 0; - 查询:昨天的数据
1
2
3
4
5SELECT * FROM regedit r WHERE DATE(r.create_time) = DATE_ADD(CURDATE(), INTERVAL -1 DAY)
或
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = -1;
或
SELECT * FROM regedit r WHERE TO_DAYS(NOW()) - TO_DAYS(r.create_time) <= 1; - 查询:前天的数据
1
2
3SELECT * FROM regedit r WHERE DATE(r.create_time) = DATE_ADD(CURDATE(), INTERVAL -2 DAY)
或
SELECT * FROM regedit r WHERE DATEDIFF(r.create_time, NOW()) = -2
【单位:周】
- 查询:本周的数据
1
SELECT * FROM regedit r WHERE WEEK(r.create_time) = WEEK(NOW())
【单位:月】
- 查询:本月的数据
1
2
3
4
5SELECT * FROM regedit r WHERE MONTH(r.create_time) = MONTH(NOW())
或
SELECT * FROM regedit r WHERE DATE_FORMAT(r.create_time, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
或
SELECT * FROM regedit r WHERE DATE_FORMAT(r.create_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m') - 查询:上一个月的数据
1
SELECT * FROM regedit r WHERE PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(r.create_time, '%Y%m')) = 1
- 查询:距离当前现在6个月的数据
1
SELECT * FROM regedit r WHERE r.create_time BETWEEN DATE_SUB(NOW(),interval 6 MONTH) AND NOW()
【单位:季度】
- 查询:本季度的数据
1
SELECT * FROM regedit r WHERE QUARTER(r.create_time) = QUARTER(NOW())
- 查询:上季度的数据
1
SELECT * FROM regedit r WHERE QUARTER(r.create_time) = QUARTER(DATE_SUB(NOW(), interval 1 QUARTER))
【单位:年】
- 查询:本年的数据
1
SELECT * FROM regedit r WHERE YEAR(r.create_time) = YEAR(NOW())
- 查询:上一年的数据
1
SELECT * FROM regedit r WHERE YEAR(r.create_time) = year(DATE_SUB(NOW(), interval 1 year))
查询存在并补齐数据
查询未来7天每天的统计数量,若没有数据则自动补 0
1 | -- create_time:日期 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 学弟不想努力了!
评论