前阵子参加一个面试的时候被问了一个问题, mysql数据库里如何统计一年中每个月的多个指标的总访问量. 我一听觉得不是很简单吗? 那人给我看了一个简单的数据表结构, 三个字段, 主键id, 访问量数num, 访问时间vtime. 然后开始写sql语句, 想想以月来计算所有的访问量就可以了. 写了一半的时候我问那个人vtime是什么类型的,他说是timestamp, 然后我就拼命地想怎么取出他的年月呢? 后来跟他说我实在想不起来时间格式怎么转换, 那个笑着跟我说回去要多学习. 回来后我搜索了一下mysql函数,发现很多我不大用的函数. 最后知道该怎么写那个查询语句了 SELECT SUM(num) FROM table_name GROUP BY DATE_FORMAT( vtime, '%y-%m' ) ;
TIMESTAMP 的类型:
列类型 显示格式
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
DATE_ADD(date,INTERVAL value Type)
ADD_DATE(date,INTERVAL value Type)
把某个值加到指定的日期。
E.G. DATE_ADD('1998-01-02', interval 31 day); output is 1998-02-02
DATE_SUB(date,INTERVAL value Type)and SUBDATE (date,INTERVAL value Type)
把指定的日期減去某个值
DATE_FORMAT(date, format_symbol)
把日期转成format_symbol所指定的格式
E.G. date_format('1998-01-02 12:21:20', '%y %m %d %h:%i:%s'); output is 1998 01 02 12:21:20
DAYNAME(date)
返回指定日期是星期几
DAYOFMONTH(date)
返回指定的日期是该月的第几天
DAYOFWEEK(date)
返回指定的日期是星期中的第几天
DAYOFYEAR(date)
返回指定的日期是一年中第几天
TIMESTAMP 的类型:
列类型 显示格式
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
DATE_ADD(date,INTERVAL value Type)
ADD_DATE(date,INTERVAL value Type)
把某个值加到指定的日期。
E.G. DATE_ADD('1998-01-02', interval 31 day); output is 1998-02-02
DATE_SUB(date,INTERVAL value Type)and SUBDATE (date,INTERVAL value Type)
把指定的日期減去某个值
DATE_FORMAT(date, format_symbol)
把日期转成format_symbol所指定的格式
E.G. date_format('1998-01-02 12:21:20', '%y %m %d %h:%i:%s'); output is 1998 01 02 12:21:20
DAYNAME(date)
返回指定日期是星期几
DAYOFMONTH(date)
返回指定的日期是该月的第几天
DAYOFWEEK(date)
返回指定的日期是星期中的第几天
DAYOFYEAR(date)
返回指定的日期是一年中第几天