最近面试过程中有人问到:”写一个查询最近一星期的数据的sql” . 当时略感懵逼, 感觉日期这块总是很模糊 . 所以这里总结下方便后期学习查看.
1.查询当前详细时间/日期/时间 .
SELECT NOW(); -- 2017-06-02 09:59:52
SELECT CURDATE(); -- 2017-06-02
SELECT CURTIME(); -- 09:59:52
2.将指定格式转换为日期/时间, 参数也可以是当前时间表达式(now()) .
SELECT DATE('2015.08.01 00:00:00'); -- 2015-08-01
SELECT TIME('2015-08-01 02:00:00'); -- 02:00:00
3.将当前日期变为天数,常用于最近几天查询 .
SELECT TO_DAYS(NOW()); -- 736847
-- 所以面试的那个题目可以解决了 :
-- 查询最近7天的数据
SELECT * from paper_respondent_statistic p where TO_DAYS(NOW()) - TO_DAYS(p.submit_time) <= 7;
4.输出指定日期格式 .
-- 输出本月的月数
SELECT DATE_FORMAT(NOW(),'%y%m'); -- 1706
-- 查询最近一个月数据
SELECT * from paper_respondent_statistic p where DATE_FORMAT(NOW(),'%y%m') = DATE_FORMAT(p.submit_time,'%y%m')
6.DATE_SUB从指定日期减去某时间格式数 .
-- 七天前的日期数
SELECT DATE_SUB(CURDATE(),INTERVAL 7 DAY) -- 2017-05-26
-- 这种方式也可以完成面试中那道题 .
SELECT * from paper_respondent_statistic p where DATE_SUB(CURDATE(),INTERVAL 7 DAY) - DATE(p.submit_time) <= 7;