这篇博客的记录,主要是在这次的项目中运用到了很多时间函数,才发现自己对mysql的时间函数记忆不够,在统计中,很多地方都是用到时间进行统计,而灵活运用sql函数,可以事半功倍。
找出当前今天的数据:
SELECT * FROM table WHERE DATE(时间字段) = CURDATE();
DATE()
,这个函数用于将时间格式(年月日 时分秒)转换成年月日,CURDATE()
函数是获取当前的年月日,NOW()
是获取当前年月日 时分秒
找出前一天的数据:
SELECT * FROM table WHERE DATE_SUB(时间字段, INTERVAL 1 DAY)
SELECT * FROM table WHERE DATE(时间字段) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
DATE_SUB()
函数得到指定日期前一天的日期/把1改为任意数字就可以得到前N天的日期,还有一个和它相反的函数
DATE_ADD()
函数得到指定日期后一天的日期/把1改为任意数字就可以得到后N天的日期
其他用法
SELECT * DATE_SUB('2019-05-10', INTERVAL 1 DAY) 表示 2019-05-09
SELECT * DATE_SUB('2019-05-10', INTERVAL 0 DAY) 表示 2019-05-10
SELECT * DATE_SUB('2019-05-10', INTERVAL -1 DAY) 表示 2019-05-11
SELECT * DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 表示 2019-04-10
SELECT * DATE_SUB(CURDATE(), INTERVAL -1 MONTH) 表示 2019-06-10
SELECT * DATE_SUB(CURDATE(), INTERVAL 1 YEAR) 表示 2018-05-10
SELECT * DATE_SUB(CURDATE(), INTERVAL -1 YEAR) 表示 2019-05-10
两个时间中间差多少天:
SELECT DATEDIFF('2019-05-10', '2019-05-09'); 得到的结果为:1
DATEDIFF()
函数用于时间相减
获取上个月的最后一天:
SELECT DATE_SUB(LAST_DAY(CURDATE()), INTERVAL 1 MONTH)
LAST_DAY()
函数用于获取某个时间里,这个月的最后一天,以上SQL的时候是,取到当前月的最后一天,在通过DATE_SUB()
函数中的INTERVAL 1 MONTH
减去一个月,得到上个月的最后一天
统计七天的数据:
SELECT * FROM table WHERE DATE(时间字段) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND DATE(时间字段) <= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
查询某个时间段内的数据:
SELECT * FROM table WHERE DATE_FORMAT(时间字段, '%y-%m-%d') >= '某时间' AND DATE_FORMAT(时间字段, '%y-%m-%d') <= '某时间'
获取周:
SELECT WEEK(CURDATE(), 1) 表示当前时间是今年第几周
获取上一周:
SELECT WEEK(DATE_SUB(CURDATE(), INTERVAL 7 DAY),1)
三十天的数据:
select * from 表名 where date_sub(curdate(), interval 30 day) <= date(时间字段名);
select * from table where date_sub(curdate(), interval 1 month) <= date(时间字段名);
本月:
select * from 表名 where date_format( 时间字段名, '%Y%m' ) = date_format(curdate( ) , '%Y%m' )
查询一个月
select * from 表名 where period_diff( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1