用 DATE_FORMAT 函数就可以了.
成都创新互联专注于企业营销型网站建设、网站重做改版、克州网站定制设计、自适应品牌网站建设、H5技术、商城网站制作、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为克州等各大城市提供网站开发制作服务。
格式化以后的结果里面, 仅仅包含 年月日时 这4个部分即可.
然后就可以 Group By 了。
下面是 DATE_FORMAT 函数的例子与说明。
mysql SELECT
- DATE_FORMAT(NOW(), '%Y~%m~%d %k.%i.%s' ) A;
+---------------------+
| A |
+---------------------+
| 2010~10~22 20.55.09 |
+---------------------+
1 row in set (0.00 sec)
%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)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
所有的其他字符不做解释被复制到结果中。
时间存入数据库一般情况下都是以时间戳存入的,所以你只需要在查询的时候加上时间戳对比的条件即可。
此处只说思路,具体的自己去查,去百度吧,百度是最好的老师,不要去要现成的代码,那样对你没有任何帮助。
根据查询的知识和自己的知识结合去测试,不停地测试,直到查询到自己想要的结果。
SELECT DATE_FORMAT(time,'%Y-%m-%d') as day, sum(case when amount0 then amount when amount=0 then 0 end) as amount1
from table where time='2014-11-01' group by day;
我没有测试。time表示日期,amount表示数量。查询11月后每天成交数量
可以看下时间函数
对日期时间进行加减法运算
(ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数
date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释
[type值 含义 期望的expr格式]:
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
DAY_HOUR 天和小时 "DAYS HOURS"
YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)
mysql SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND;
- 1998-01-01 00:00:00
mysql SELECT INTERVAL 1 DAY "1997-12-31";
- 1998-01-01
mysql SELECT "1998-01-01" - INTERVAL 1 SECOND;
- 1997-12-31 23:59:59
mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
- 1998-01-01 00:00:00
mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);
- 1998-01-01 23:59:59
mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
- 1998-01-01 00:01:00
mysql SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
- 1997-12-30 22:58:59
mysql SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
- 1997-12-30 14:00:00
mysql SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
- 1997-12-02
mysql SELECT EXTRACT(YEAR FROM "1999-07-02");
- 1999
mysql SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
- 199907
mysql SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
- 20102
TO_DAYS(date)
返回日期date是西元0年至今多少天(不计算1582年以前)
mysql select TO_DAYS(950501);
- 728779
mysql select TO_DAYS('1997-10-07');
- 729669
FROM_DAYS(N)
给出西元0年至今多少天返回DATE值(不计算1582年以前)
mysql select FROM_DAYS(729669);
- '1997-10-07'
本文来自CSDN博客,转载请标明出处:
以下是创建一张测试表TEST并且按照时间CREATE_TIME创建RANGE分区,并使用ID创建hash分区,组成复合分区。
CREATE TABLE TEST (
CREATE_TIME DATETIME DEFAULT NULL, ID BIGINT(15) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS(CREATE_TIME)) PARTITIONS 7 SUBPARTITION BY HASH(ID) SUBPARTITIONS 16
(PARTITION P1710 VALUES LESS THAN (TO_DAYS ('2017-10-01'))
(SUBPARTITION P1710sp0 ,SUBPARTITION P1710sp1 ,
SUBPARTITION P1710sp2 ,SUBPARTITION P1710sp3 ,
SUBPARTITION P1710sp4 ,SUBPARTITION P1710sp5 ,
SUBPARTITION P1710sp6 ,SUBPARTITION P1710sp7 ,
SUBPARTITION P1710sp8 ,SUBPARTITION P1710sp9 ,
SUBPARTITION P1710sp10 ,SUBPARTITION P1710sp11 ,
SUBPARTITION P1710sp12 ,SUBPARTITION P1710sp13 ,
SUBPARTITION P1710sp14 ,SUBPARTITION P1710sp15 ),
PARTITION P1711 VALUES LESS THAN (TO_DAYS ('2017-11-01'))
(SUBPARTITION P1711sp0 ,SUBPARTITION P1711sp1 ,
SUBPARTITION P1711sp2 , SUBPARTITION P1711sp3 ,
SUBPARTITION P1711sp4 , SUBPARTITION P1711sp5 ,
SUBPARTITION P1711sp6 , SUBPARTITION P1711sp7 ,
SUBPARTITION P1711sp8 , SUBPARTITION P1711sp9 ,
SUBPARTITION P1711sp10 , SUBPARTITION P1711sp11 ,
SUBPARTITION P1711sp12 , SUBPARTITION P1711sp13 ,
SUBPARTITION P1711sp14 , SUBPARTITION P1711sp15 ),
SELECT uptime, CASE WHEN datepart(hour,uptime) IN (0,1) THEN 1
WHEN datepart(hour,uptime) IN (2,3) THEN 2
WHEN datepart(hour,uptime) IN (4,5) THEN 3
WHEN datepart(hour,uptime) IN (6,7) THEN 4
WHEN datepart(hour,uptime) IN (8,9) THEN 5
WHEN datepart(hour,uptime) IN (10,11) THEN 6
WHEN datepart(hour,uptime) IN (12,13) THEN 7
WHEN datepart(hour,uptime) IN (14,15) THEN 8
WHEN datepart(hour,uptime) IN (16,17) THEN 9
WHEN datepart(hour,uptime) IN (18,19) THEN 10
WHEN datepart(hour,uptime) IN (20,21) THEN 11
WHEN datepart(hour,uptime) IN (22,23) THEN 12
ELSE 0 END AS sq
FROM bak_dircost0901
-------------------------------
uptime sq
2014/8/19 9:20:59 5
2014/8/22 20:31:20 11
2014/8/22 20:33:08 11
2014/8/26 13:48:01 7
2014/8/27 16:10:45 9