mysql按日、周、月统计
使用DATE_FORMAT
函数格式化日期
语法
DATE_FORMAT(date,format)
date
根据format
字符串格式化值。
下表中显示的说明符可以在format
字符串中使用。%
是格式说明符之前的必需字符。
说明符 | 描述 |
---|---|
%a | 工作日的缩写名称(Sun.. Sat) |
%b | 月份缩写名称(Jan.. Dec) |
%c | 月份,数字(0.. 12) |
%D | 带英文后缀的某一天(0th, 1st,2nd, 3rd,…) |
%d | 一个月中的一天,数字(00.. 31) |
%e | 一个月中的一天,数字(0.. 31) |
%f | 微秒(000000.. 999999) |
%H | 小时(00.. 23) |
%h | 小时(01.. 12) |
%I | 小时(01.. 12) |
%i | 分钟,数字(00.. 59) |
%j | 一年中的一天(001.. 366) |
%k | 小时(0.. 23) |
%l | 小时(1.. 12) |
%M | 月份英文名(January.. December) |
%m | 月份,数字(00.. 12) |
%p | AM 或 PM |
%r | 12小时制时间(hh:mm:ss 后跟 AM 或PM ) |
%S | 秒(00.. 59) |
%s | 秒(00.. 59) |
%T | 24小时制时间(hh:mm:ss ) |
%U | 周(00.. 53),其中星期日是一周的第一天; WEEK() 模式0 |
%u | 周(00.. 53),其中星期一是一周的第一天; WEEK() 模式1 |
%V | 周(01.. 53),其中星期日是一周的第一天; WEEK() 模式2; 用于 %X |
%v | 周(01.. 53),其中星期一是一周的第一天; WEEK() 模式3; 用于 %x |
%W | 工作日名称(Sunday.. Saturday) |
%w | 星期几(0=星期天.. 6=星期六) |
%X | 星期的年份,其中星期日是一周的第一天,数字,四位数;用于%V |
%x | 一周的年份,其中星期一是一周的第一天,数字,四位数;用于%v |
%Y | 年,数字(四位数字) |
%y | 年,数字(两位数字) |
%% | 文字% 字符 |
%x | x ,对于上面未列出的任何 “x ” |
那么,如果按照一定时间间隔统计可以如下实现
最近7日统计
SELECT
date
FROM
user_date
WHERE
date > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY
date
ORDER BY
date DESC
最近7周统计
SELECT
DATE_FORMAT(date,'%Y%u') week,
USER
FROM
user_date
WHERE
date > DATE_SUB(CURDATE(), INTERVAL 7 WEEK)
GROUP BY
week
ORDER BY
date DESC
最近6个月统计
SELECT
DATE_FORMAT(date,'%Y%m') month,
USER
FROM
user_date
WHERE
date > DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
GROUP BY
month
ORDER BY
date DESC
这里使用到了DATE_SUB
这个函数,它表示从指定开始日期减去之间时间间隔。
语法
DATE_SUB(date,INTERVAL expr unit)
date
参数指定开始日期或日期时间值。expr
是一个表达式,指定要从开始日期减去的间隔值。expr
作为字符串计算;它可以以-
开始,表示负间隔。unit
是一个关键字,用来指明解释表达式的单位。
如下表介绍每个unit
的预期形式。
unit 值 | 预期expr 格式 |
---|---|
MICROSECOND | MICROSECONDS |
SECOND | SECONDS |
MINUTE | MINUTES |
HOUR | HOURS |
DAY | DAYS |
WEEK | WEEKS |
MONTH | MONTHS |
QUARTER | QUARTERS |
YEAR | YEARS |
SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS’ |
MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS’ |
MINUTE_SECOND | ‘MINUTES:SECONDS’ |
HOUR_MICROSECOND | ‘HOURS:MINUTES:SECONDS.MICROSECONDS’ |
HOUR_SECOND | ‘HOURS:MINUTES:SECONDS’ |
HOUR_MINUTE | ‘HOURS:MINUTES’ |
DAY_MICROSECOND | ‘DAYS HOURS:MINUTES:SECONDS.MICROSECONDS’ |
DAY_SECOND | ‘DAYS HOURS:MINUTES:SECONDS’ |
DAY_MINUTE | ‘DAYS HOURS:MINUTES’ |
DAY_HOUR | ‘DAYS HOURS’ |
YEAR_MONTH | ‘YEARS-MONTHS’ |
根据此,我们还可以轻松写出一个最近30天的查询统计
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=2572