目录

前言按天统计按周统计按月统计按年统计date_format参数

前言

mysql的date_format函数想必大家都使用过吧,一般用于日期时间转化

# 例如

select DATE_FORMAT('2023-01-01 08:30:50','%Y-%m-%d %H:%i:%s')

# 可以得出 2023-01-01 08:30:50

# 或者是

select DATE_FORMAT('2023-01-01 08:30:50','%Y-%m-%d')

# 可以得出

不过很多时间不仅仅仅限于这些最基础的使用,当我们需要对于时间的数据有更高的要求时,就需要对这个函数有更多的了解了,例如按一定的时间段分组统计这段时间的数据,本期我们主要讲这个分组统计的操作,下面直接进入正题

按天统计

按天统计是一个比较基础的统计方式,大部分人也应该能直接写出来

select

date_format(o.bill_date,'%Y-%m-%d') evertday,

COUNT(*) orderNum

FROM table o

GROUP BY evertday

ORDER BY evertday DESC

按周统计

按周统计就比较麻烦一点了,我这边提供了两种思路:

第一种:

SELECT

subdate(date_format(o.bill_date,'%Y-%m-%d'),date_format(o.bill_date,'%w')) weekend

,COUNT(*) orderNum

FROM test o

GROUP BY weekend

ORDER BY weekend DESC

LIMIT 9

这边可以看出日期已经按照周进行排序分组了,7月30到8月5号的数据都已经统计到了7月30这个weekend中 我们简单剖析一下: 首先date_format(o.bill_date,'%Y-%m-%d')大家都很清楚会把日期变成yyyy-MM-dd形式 而date_format(o.bill_date,'%w')会统计这天是这周的礼拜几,这个参数我在最后整理了一张表格可供大家查看使用 那么8月2号正好是礼拜三,再通过subdate函数去减一下这个日期就可以统计出来一个对应的时间了,或者也有朋友喜欢用DATE_SUB函数都是一样的效果,这样就统计出来了上周末的时间,也就是上周末到这周末是一个轮回

第二种:

-- 2、

select

-- weekday(bill_date) as weekday,

date_format(date_add(bill_date, interval - (weekday(bill_date) +1) day),'%Y-%m-%d') as monday,

count(1)

from t

group by monday

order by monday desc

总体的思路都差不多,计算出了上周日的时间点进行group by

按月统计

按月统计的话就是另外一种思路了,因为按周的统计的话还存在日的概念,而按月统计的话就可以省略掉日期了

select

DATE_FORMAT( bill_date, '%Y-%m' ) months,

count(1) count

from

t

group by months

order by months desc

按年统计

这个跟按月统计一个道理,只统计年份就可以了

select

DATE_FORMAT( bill_date, '%Y' ) months,

count(1 ) count

from

t

group by months

order by months desc

date_format参数

格式描述%M月名字(January……December)%W星期名字(Sunday……Saturday)%D有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)%Y年, 数字, 4 位%y年, 数字, 2 位%a缩写的星期名字(Sun……Sat)%d月份中的天数, 数字(00……31)%e月份中的天数, 数字(0……31)%m月, 数字(01……12)%c月, 数字(1……12)%b缩写的月份名字(Jan……Dec)%j一年中的天数(001……366)%H小时(00……23)%k小时(0……23)%h小时(01……12)%I小时(01……12)%l小时(1……12)%i分钟, 数字(00……59)%r时间,12 小时(hh:mm:ss [AP]M)%T时间,24 小时(hh:mm:ss)%S秒(00……59)%s秒(00……59)%pAM或PM%w一个星期中的天数(0=Sunday ……6=Saturday )%U星期(0……52), 这里星期天是星期的第一天%u星期(0……52), 这里星期一是星期的第一天%%一个文字“%”

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: