热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

按年、季度、月分组计算日期和时间的函数

Mysql按年、季度、月分组按月度分组:selectDATE_FORMAT(i.created_at,%Y-%m月).GROUPB

Mysql 按年、季度、月分组

按月度分组:

select DATE_FORMAT(i.created_at, '%Y-%m月')...................GROUP BY DATE_FORMAT(i.created_at, '%Y-%m')

 按季度分组:

select CONCAT(YEAR(i.created_at),'_',QUARTER(i.created_at),'Q')....................GROUP BY CONCAT(YEAR(i.created_at),'_',QUARTER(i.created_at),'Q')

按年度分组:

 select DATE_FORMAT(i.created_at, '%Y')..............................GROUP BY DATE_FORMAT(i.created_at, '%Y')

 

下面的查询选择了所有记录,其date_col的值是在最后30天以内: 

 

Sql代码  收藏代码
  1. mysql> SELECT something FROM table    
  2. WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <&#61; 30;    

 

 
DAYOFWEEK(date)  
返回日期date的星期索引(1&#61;星期天&#xff0c;2&#61;星期一, ……7&#61;星期六)。这些索引值对应于ODBC标准。 

 

Sql代码  收藏代码
  1. mysql> select DAYOFWEEK(&#39;1998-02-03&#39;);    
  2. -> 3    

 

 
WEEKDAY(date)  
返回date的星期索引(0&#61;星期一&#xff0c;1&#61;星期二, ……6&#61; 星期天)。 

 

Sql代码  收藏代码
  1. mysql> select WEEKDAY(&#39;1997-10-04 22:23:00&#39;);    
  2. -> 5    
  3. mysql> select WEEKDAY(&#39;1997-11-05&#39;);    
  4. -> 2    

 

 
DAYOFMONTH(date)  
返回date的月份中日期&#xff0c;在1到31范围内。 

 

Sql代码  收藏代码
  1. mysql> select DAYOFMONTH(&#39;1998-02-03&#39;);    
  2. -> 3    

 

 
DAYOFYEAR(date)  
返回date在一年中的日数, 在1到366范围内。 

 

Sql代码  收藏代码
  1. mysql> select DAYOFYEAR(&#39;1998-02-03&#39;);    
  2. -> 34    

 

 
MONTH(date)  
返回date的月份&#xff0c;范围1到12。 

 

Sql代码  收藏代码
  1. mysql> select MONTH(&#39;1998-02-03&#39;);    
  2. -> 2    

 

 
DAYNAME(date)  
返回date的星期名字。 

 

Sql代码  收藏代码
  1. mysql> select DAYNAME("1998-02-05");    
  2. -> &#39;Thursday&#39;    

 

 
MONTHNAME(date)  
返回date的月份名字。 

 

Sql代码  收藏代码
  1. mysql> select MONTHNAME("1998-02-05");    
  2. -> &#39;February&#39;    

 

 
QUARTER(date)  
返回date一年中的季度&#xff0c;范围1到4。 

 

Sql代码  收藏代码
  1. mysql> select QUARTER(&#39;98-04-01&#39;);    
  2. -> 2    

 

 
WEEK(date)  
   
WEEK(date,first)  
对于星期天是一周的第一天的地方&#xff0c;有一个单个参数&#xff0c;返回date的周数&#xff0c;范围在0到52。2个参数形式WEEK()允许 
你指定星期是否开始于星期天或星期一。如果第二个参数是0&#xff0c;星期从星期天开始&#xff0c;如果第二个参数是1&#xff0c; 
从星期一开始。 

 

Sql代码  收藏代码
  1. mysql> select WEEK(&#39;1998-02-20&#39;);    
  2. -> 7    
  3. mysql> select WEEK(&#39;1998-02-20&#39;,0);    
  4. -> 7    
  5. mysql> select WEEK(&#39;1998-02-20&#39;,1);    
  6. -> 8    

 

 
YEAR(date)  
返回date的年份&#xff0c;范围在1000到9999。 

 

Sql代码  收藏代码
  1. mysql> select YEAR(&#39;98-02-03&#39;);    
  2. -> 1998    

 

 
HOUR(time)  
返回time的小时&#xff0c;范围是0到23。 

 

Sql代码  收藏代码
  1. mysql> select HOUR(&#39;10:05:03&#39;);    
  2. -> 10    

 

 
MINUTE(time)  
返回time的分钟&#xff0c;范围是0到59。 

 

Sql代码  收藏代码
  1. mysql> select MINUTE(&#39;98-02-03 10:05:03&#39;);    
  2. -> 5    

 

 
SECOND(time)  
回来time的秒数&#xff0c;范围是0到59。 

 

Sql代码  收藏代码
  1. mysql> select SECOND(&#39;10:05:03&#39;);    
  2. -> 3    

 

 
PERIOD_ADD(P,N)  
增加N个月到阶段P&#xff08;以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 

 

Sql代码  收藏代码
  1. mysql> select PERIOD_ADD(9801,2);    
  2. -> 199803    

 

 
PERIOD_DIFF(P1,P2)  
返回在时期P1和P2之间月数&#xff0c;P1和P2应该以格式YYMM或YYYYMM。注意&#xff0c;时期参数P1和P2不是日期值。 

 

Sql代码  收藏代码
  1. mysql> select PERIOD_DIFF(9802,199703);    
  2. -> 11    

 

 
DATE_ADD(date,INTERVAL expr type)  
   
DATE_SUB(date,INTERVAL expr type)  
   
ADDDATE(date,INTERVAL expr type)  
   
SUBDATE(date,INTERVAL expr type)  
这些功能执行日期运算。对于MySQL 3.22&#xff0c;他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。 
在MySQL 3.23中&#xff0c;你可以使用&#43;和-而不是DATE_ADD()和DATE_SUB()。&#xff08;见例子&#xff09;date是一个指定开始日期的 
DATETIME或DATE值&#xff0c;expr是指定加到开始日期或从开始日期减去的间隔值一个表达式&#xff0c;expr是一个字符串&#xff1b;它可以以 
一个“-”开始表示负间隔。type是一个关键词&#xff0c;指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期 
中返回“type”间隔。

 

下表显示了type和expr参数怎样被关联&#xff1a; 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 小时, 分钟&#xff0c; "HOURS:MINUTES:SECONDS"  
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"  
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"  

MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅 
包含YEAR、MONTH和DAY部分(即&#xff0c;没有时间部分)&#xff0c;结果是一个DATE值。否则结果是一个DATETIME值。 

 

Sql代码  收藏代码
  1. mysql> SELECT "1997-12-31 23:59:59" &#43; INTERVAL 1 SECOND;    
  2. -> 1998-01-01 00:00:00    
  3. mysql> SELECT INTERVAL 1 DAY &#43; "1997-12-31";    
  4. -> 1998-01-01    
  5. mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;    
  6. -> 1997-12-31 23:59:59    
  7. mysql> SELECT DATE_ADD("1997-12-31 23:59:59",    
  8. INTERVAL 1 SECOND);    
  9. -> 1998-01-01 00:00:00    
  10. mysql> SELECT DATE_ADD("1997-12-31 23:59:59",    
  11. INTERVAL 1 DAY);    
  12. -> 1998-01-01 23:59:59    
  13. mysql> SELECT DATE_ADD("1997-12-31 23:59:59",    
  14. INTERVAL "1:1" MINUTE_SECOND);    
  15. -> 1998-01-01 00:01:00    
  16. mysql> SELECT DATE_SUB("1998-01-01 00:00:00",    
  17. INTERVAL "1 1:1:1" DAY_SECOND);    
  18. -> 1997-12-30 22:58:59    
  19. mysql> SELECT DATE_ADD("1998-01-01 00:00:00",    
  20. INTERVAL "-1 10" DAY_HOUR);    
  21. -> 1997-12-30 14:00:00    
  22. mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);    
  23. -> 1997-12-02    
  24. mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");    
  25. -> 1999    
  26. mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");    
  27. -> 199907    
  28. mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");    
  29. -> 20102    

 

 
如果你指定太短的间隔值(不包括type关键词期望的间隔部分)&#xff0c;MySQL假设你省掉了间隔值的最左面部分。例如&#xff0c; 
如果你指定一个type是DAY_SECOND&#xff0c;值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值&#xff0c; 
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说&#xff0c;"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND 
的方式解释&#xff0c;这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期&#xff0c; 
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数&#xff0c;日子在新月用最大的天调整。 

 

Sql代码  收藏代码
  1. mysql> select DATE_ADD(&#39;1998-01-30&#39;, Interval 1 month);    
  2. -> 1998-02-28    

 

 
注意&#xff0c;从前面的例子中词INTERVAL和type关键词不是区分大小写的。  
TO_DAYS(date)  
给出一个日期date&#xff0c;返回一个天数(从0年的天数)。 

 

Sql代码  收藏代码
  1. mysql> select TO_DAYS(950501);    
  2. -> 728779    
  3. mysql> select TO_DAYS(&#39;1997-10-07&#39;);    
  4. -> 729669    

 

 
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。  

FROM_DAYS(N)  
给出一个天数N&#xff0c;返回一个DATE值。 

 

Sql代码  收藏代码
  1. mysql> select FROM_DAYS(729669);    
  2. -> &#39;1997-10-07&#39;    

 

 
TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。  

DATE_FORMAT(date,format)  
根据format字符串格式化date值。下列修饰符可以被用在format字符串中&#xff1a; %M 月名字(January……December)  
%W 星期名字(Sunday……Saturday)  
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。&#xff09;  
%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&#61;Sunday ……6&#61;Saturday &#xff09;  
%U 星期(0……52), 这里星期天是星期的第一天  
%u 星期(0……52), 这里星期一是星期的第一天  
%% 一个文字“%”。  

所有的其他字符不做解释被复制到结果中。 

 

Sql代码  收藏代码
  1. mysql> select DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;, &#39;%W %M %Y&#39;);    
  2. -> &#39;Saturday October 1997&#39;    
  3. mysql> select DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;, &#39;%H:%i:%s&#39;);    
  4. -> &#39;22:23:00&#39;    
  5. mysql> select DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;,    
  6. &#39;%D %y %a %d %m %b %j&#39;);    
  7. -> &#39;4th 97 Sat 04 10 Oct 277&#39;    
  8. mysql> select DATE_FORMAT(&#39;1997-10-04 22:23:00&#39;,    
  9. &#39;%H %k %I %r %T %S %w&#39;);    
  10. -> &#39;22 22 10 10:23:00 PM 22:23:00 00 6&#39;    

 

 
MySQL3.23中&#xff0c;在格式修饰符字符前需要%。在MySQL更早的版本中&#xff0c;%是可选的。  

TIME_FORMAT(time,format)  
这象上面的DATE_FORMAT()函数一样使用&#xff0c;但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。 
其他修饰符产生一个NULL值或0。  
CURDATE()  
   
CURRENT_DATE  
以&#39;YYYY-MM-DD&#39;或YYYYMMDD格式返回今天日期值&#xff0c;取决于函数是在一个字符串还是数字上下文被使用。 

 

Sql代码  收藏代码
  1. mysql> select CURDATE();    
  2. -> &#39;1997-12-15&#39;    
  3. mysql> select CURDATE() &#43; 0;    
  4. -> 19971215    

 

 
CURTIME()  
   
CURRENT_TIME  
以&#39;HH:MM:SS&#39;或HHMMSS格式返回当前时间值&#xff0c;取决于函数是在一个字符串还是在数字的上下文被使用。 

 

Sql代码  收藏代码
  1. mysql> select CURTIME();    
  2. -> &#39;23:50:26&#39;    
  3. mysql> select CURTIME() &#43; 0;    
  4. -> 235026    

 

 
NOW()  
   
SYSDATE()  
   
CURRENT_TIMESTAMP  
以&#39;YYYY-MM-DD HH:MM:SS&#39;或YYYYMMDDHHMMSS格式返回当前的日期和时间&#xff0c;取决于函数是在一个字符串还是在数字的 
上下文被使用。 

 

Sql代码  收藏代码
  1. mysql> select NOW();    
  2. -> &#39;1997-12-15 23:50:26&#39;    
  3. mysql> select NOW() &#43; 0;    
  4. -> 19971215235026    

 

 
UNIX_TIMESTAMP()  
   
UNIX_TIMESTAMP(date)  
如果没有参数调用&#xff0c;返回一个Unix时间戳记(从&#39;1970-01-01 00:00:00&#39;GMT开始的秒数)。如果UNIX_TIMESTAMP()用一 
个date参数被调用&#xff0c;它返回从&#39;1970-01-01 00:00:00&#39; GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME 
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。 

 

Sql代码  收藏代码
  1. mysql> select UNIX_TIMESTAMP();    
  2. -> 882226357    
  3. mysql> select UNIX_TIMESTAMP(&#39;1997-10-04 22:23:00&#39;);    
  4. -> 875996580    

 

 
当UNIX_TIMESTAMP被用于一个TIMESTAMP列&#xff0c;函数将直接接受值&#xff0c;没有隐含的“string-to-unix-timestamp”变换。  

FROM_UNIXTIME(unix_timestamp)  
以&#39;YYYY-MM-DD HH:MM:SS&#39;或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值&#xff0c;取决于函数是在一个字符串 
还是或数字上下文中被使用。 

 

Sql代码  收藏代码
  1. mysql> select FROM_UNIXTIME(875996580);    
  2. -> &#39;1997-10-04 22:23:00&#39;    
  3. mysql> select FROM_UNIXTIME(875996580) &#43; 0;    
  4. -> 19971004222300    

 

 
FROM_UNIXTIME(unix_timestamp,format)  
返回表示 Unix 时间标记的一个字符串&#xff0c;根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条 
目同样的修饰符。 

 

Sql代码  收藏代码
  1. mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),    
  2. &#39;%Y %D %M %h:%i:%s %x&#39;);    
  3. -> &#39;1997 23rd December 03:43:30 x&#39;    

 

 
SEC_TO_TIME(seconds)  
返回seconds参数&#xff0c;变换成小时、分钟和秒&#xff0c;值以&#39;HH:MM:SS&#39;或HHMMSS格式化&#xff0c;取决于函数是在一个字符串还是在数字 
上下文中被使用。 

 

Sql代码  收藏代码
  1. mysql> select SEC_TO_TIME(2378);    
  2. -> &#39;00:39:38&#39;    
  3. mysql> select SEC_TO_TIME(2378) &#43; 0;    
  4. -> 3938    

 

 
TIME_TO_SEC(time)  
返回time参数&#xff0c;转换成秒。 

 

Sql代码  收藏代码
  1. mysql> select TIME_TO_SEC(&#39;22:23:00&#39;);    
  2. -> 80580    
  3. mysql> select TIME_TO_SEC(&#39;00:39:38&#39;);    
  4. -> 2378   

 

  转&#xff1a;http://kree.iteye.com/blog/659511



推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
author-avatar
祢好世界末日
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有