ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
问题:开发时建表没有 建立day month year 字段 直接用的时间戳,但是统计时要用到按天,月,年进行排序,如何实现? mysql没有提供unix时间戳的专门处理函数,如果遇到时间分组,而用的又是整型unix时间戳,则只有通过FROM_UNIXTIM()函数将unix时间戳转为datetime等其他的日期类型! 下面来看具体的例子 一、年度查询 查询 本年度的数据 代码示例: ~~~ SELECT * FROM news_info WHERE year( FROM_UNIXTIME( BlogCreateTime ) ) = year( curdate( )) ~~~ 二、查询季度数据 查询数据附带季度数 代码示例: ~~~ SELECT ArticleId, quarter( FROM_UNIXTIME( `BlogCreateTime` ) ) FROM `news_info` ~~~ 其他的同前面部分:查询 本季度的数据 代码示例: ~~~ SELECT * FROM news_info WHERE quarter( FROM_UNIXTIME( BlogCreateTime ) ) = quarter( curdate( )) ~~~ 三、查询月度数据 本年本月统计(MySQL) 代码示例: ~~~ select * from booking where month(booking_time) = month(curdate()) and year(booking_time) = year(curdate()) ~~~ 本周统计(MySQL) 复制代码 代码示例: ~~~ select * from spf_booking where month(booking_time) = month(curdate()) and week(booking_time) = week(curdate()) ~~~ 四、时间段 N天内记录 代码示例: ~~~ WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段) <= N ~~~ 当天的记录 代码示例: ~~~ where date(时间字段)=date(now()) ~~~ 或 ~~~ where to_days(时间字段) = to_days(now()); ~~~ 查询一周: 代码示例: ~~~ select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time); ~~~ 查询一个月: 代码示例: ~~~ select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time); ~~~ 查询'06-03'到'07-08'这个时间段内所有过生日的会员: 代码示例: ~~~ Select * From user Where DATE_FORMAT(birthday,'%m-%d') >= '06-03' and DATE_FORMAT(birthday,'%m-%d') <= '07-08'; ~~~ 统计一季度数据,表时间字段为:savetime 代码示例: ~~~ group by concat(date_format(savetime, '%Y '),FLOOR((date_format(savetime, '%m ')+2)/3)) ~~~ 或 ~~~ select YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1,count(*) from yourTable group by YEAR(savetime)*10+((MONTH(savetime)-1) DIV 3) +1; ~~~ 五、分组查询 1、年度分组 2、月度分组 3、先按年度分组,再按月度分组 4、按年月分组 代码示例: ~~~ SELECT count(ArticleId), date_format(FROM_UNIXTIME( `BlogCreateTime`),'%y%m') sdate FROM `news_info` group by sdate ~~~ 结果: 代码示例: |count( ArticleId ) |sdate| |--|--| |17|0901| |11|0902| |5|0903| |6|0904| |2|0905| |1 |0907| |12|0908| |6| 0909| |11|0910| |3|0911| ~~~ SELECT count(*) from ea_user WHERE FROM_UNIXTIME(addtime,'%Y年%m月%d日 %h') ="2016年03月17日 10" order by addtime desc ~~~