根据日期,按照周、月、季、年对数据进行分组统计
一、前言
带着问题去学习,我觉得是一种非常有效的学习方法,不知下面的几个问题是否也是你所需要考虑的:被分组的日期是否连续、周是以周日为起始日,还是以周一为起始日、日期跨年。在讨论日期查询的复杂性之前,我们有必要知道一些内建日期处理函数和Date/Time(日期/时间)数据类型,已经有一定了解的快速浏览下就好,直接去后半部分享用正餐。
二、内建日期处理函数
- NOW() 函数
定义和用法:
NOW() 返回当前的日期和时间。
查询
select now();
结果
- UNIX_TIMESTAMP() 函数
定义和用法:
1 无参数调用:UNIX_TIMESTAMP() 返回值:自'1970-01-01 00:00:00'的到当前时间的秒数差
2 有参数调用:UNIX_TIMESTAMP(date) 返回值:自'1970-01-01 00:00:00'与指定时间的秒数差
查询:
select UNIX_TIMESTAMP(), UNIX_TIMESTAMP('20180912');
结果:
- DATE_FORMAT() 函数
定义和用法:
DATE_FORMAT(date,format) 函数用于以不同的格式显示日期/时间数据。
查询:
select DATE_FORMAT(NOW(),'%Y-%m-%d');
结果:
三、 Date类型
- date数据类型
数据类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() | 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59& |