MySQL日期时间函数大全

来源:互联网 发布:佛伊泰克 知乎 编辑:程序博客网 时间:2024/06/09 17:21
DAYOFWEEK(date) 
 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
mysql> select DAYOFWEEK('2017-10-01'); 

  -> 1 


WEEKDAY(date) 
 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 
mysql> select WEEKDAY('2017-10-01 22:23:00'); 
  -> 6
mysql> select WEEKDAY('2017-10-02'); 

  -> 0 


DAYOFMONTH(date) 
 返回date是一月中的第几日(在1到31范围内) 
mysql>select DAYOFMONTH('2017-10-08'); ; 

  -> 3 


DAYOFYEAR(date) 
 返回date是一年中的第几日(在1到366范围内) 
mysql> select DAYOFYEAR('2017-10-08'); 

  -> 34 


MONTH(date) 
 返回date中的月份数值 
mysql> select MONTH('2017-10-08'); 

  -> 2 


DAYNAME(date) 
 返回date是星期几(按英文名返回)
mysql> select DAYNAME("2017-10-08"); 

  -> 'Sunday' 


MONTHNAME(date) 
 返回date是几月(按英文名返回)
mysql> select MONTHNAME("2017-10-08"); 

  -> 'October' 


QUARTER(date) 
 返回date是一年的第几个季度 
mysql> select QUARTER('89-11-04'); 

  -> 4 


WEEK(date,first)  
 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)  >2017-10-08 周日

mysql> select WEEK('2017-10-08');   

  -> 41 

mysql> select WEEK('2017-10-08',0); 

  -> 41
mysql> select WEEK('2017-10-08',1); 
  -> 40


YEAR(date) 
 返回date的年份(范围在1000到9999) 
mysql> select YEAR('17-10-08');

  -> 2017


HOUR(time) 
 返回time的小时数(范围是0到23)
mysql> select HOUR('10:06:08'); 

  -> 10 


MINUTE(time) 
 返回time的分钟数(范围是0到59) 
mysql> select MINUTE('89-11-04 10:06:08'); 

  -> 6 


SECOND(time) 
 返回time的秒数(范围是0到59)
mysql> select SECOND('10:06:08'); 

  -> 8


PERIOD_ADD(P,N) 
 增加N个月到时期P并返回(P的格式YYMM或YYYYMM) 
mysql> select PERIOD_ADD(8911,2); 

  -> 199001


PERIOD_DIFF(P1,P2) 
 返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
mysql> select PERIOD_DIFF(201710,201706);

  -> 4


DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type) 
ADDDATE(date,INTERVAL expr type) 
SUBDATE(date,INTERVAL expr type)

 对日期时间进行加减法运算   

                         (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数

 date是一个DATETIME或DATE值,

                     expr对date进行加减法的一个表达式字符串,

             type指明表达式expr应该如何被解释,

[type值 含义 期望的expr格式]:

类型(type值)含义expr表达式的形式YEAR年YYMONTH月MMDAY日DDHOUR时hhMINUTE分mmSECOND秒ssYEAR_MONTH年和月YY和MM之间用任意符号隔开DAY_HOUR日和小时DD和hh之间用任意符号隔开DAY_MINUTE日和分钟DD和mm之间用任意符号隔开DAY_SECOND日和秒钟DD和ss之间用任意符号隔开HOUR_MINUTE时和分hh和mm之间用任意符号隔开HOUR_SECOND时和秒hh和ss之间用任意符号隔开MINUTE_SECOND分和秒mm和ss之间用任意符号隔开

              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 


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' 


CURDATE() 或者 CURRENT_DATE()
 以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字) 
mysql> select CURDATE(); 
  -> '1997-12-15' 
mysql> select CURDATE() ; 
  ->'1997-12-15' 


CURTIME() 或者 CURRENT_TIME()
 以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字) 
mysql> select CURTIME(); 
  -> '16:55:06' 
mysql> select CURTIME() ; 
  -> ‘16:55:06’


NOW() 、SYSDATE()、 CURRENT_TIMESTAMP()
 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字) 
mysql> select NOW(); 
  -> '2017-09-25 16:56:21' 

mysql> select SYSDATE()
  ->'2017-09-25 16:56:21

mysql> select SYSDATE()

  ->'2017-09-25 16:56:21


UNIX_TIMESTAMP() 或者UNIX_TIMESTAMP(date) 

 返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
mysql> select UNIX_TIMESTAMP(); 
  -> 1506330015
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'); 
  -> 875974980


FROM_UNIXTIME(unix_timestamp) 
 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字) 
mysql> select FROM_UNIXTIME(875996580); 
  -> '1997-10-04 22:23:00' 
mysql> select FROM_UNIXTIME(875996580) 0; 
  -> 19971004222300 


FROM_UNIXTIME(unix_timestamp,format) 
 以format字符串格式返回时间戳的值
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x'); 
  -> '1997 23rd December 03:43:30 x' 


SEC_TO_TIME(seconds) 
 以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字) 
mysql> select SEC_TO_TIME(2378); 
  -> '00:39:38' 
mysql> select SEC_TO_TIME(2378) 0; 
  -> 3938 


TIME_TO_SEC(time) 
 返回time值有多少秒 
mysql> select TIME_TO_SEC('22:23:00'); 
  -> 80580 
mysql> select TIME_TO_SEC('00:39:38'); 
  -> 2378

DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

语法

DATE_FORMAT(date,format)

date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式描述%a缩写星期名%b缩写月名%c月,数值%D带有英文前缀的月中的天%d月的天,数值(00-31)%e月的天,数值(0-31)%f微秒%H小时 (00-23)%h小时 (01-12)%I小时 (01-12)%i分钟,数值(00-59)%j年的天 (001-366)%k小时 (0-23)%l小时 (1-12)%M月名%m月,数值(00-12)%pAM 或 PM%r时间,12-小时(hh:mm:ss AM 或 PM)%S秒(00-59)%s秒(00-59)%T时间, 24-小时 (hh:mm:ss)%U周 (00-53) 星期日是一周的第一天%u周 (00-53) 星期一是一周的第一天%V周 (01-53) 星期日是一周的第一天,与 %X 使用%v周 (01-53) 星期一是一周的第一天,与 %x 使用%W星期名%w周的天 (0=星期日, 6=星期六)%X年,其中的星期日是周的第一天,4 位,与 %V 使用%x年,其中的星期一是周的第一天,4 位,与 %v 使用%Y年,4 位%y年,2 位


下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')DATE_FORMAT(NOW(),'%m-%d-%Y')DATE_FORMAT(NOW(),'%d %b %y')DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

结果类似:

Dec 29 2008 11:45 PM12-29-200829 Dec 0829 Dec 2008 16:25:46.635


TIME_FORMAT(time,format) 和 DATE_FORMAT() 类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)

ValueDescription%fMicroseconds (000000 to 999999)
%f is available starting in MySQL 4.1.1%HHour (00 to 23 generally, but can be higher)%hHour (00 to 12)%IHour (00 to 12)%iMinutes (00 to 59)%pAM or PM%rTime in 12 hour AM or PM format (hh:mm:ss AM/PM)%SSeconds (00 to 59)%sSeconds (00 to 59)%TTime in 24 hour format (hh:mm:ss)

mysql> SELECT TIME_FORMAT('15:02:28', '%H %i %s');Result: '15 02 28'mysql> SELECT TIME_FORMAT('15:02:28', '%h:%i:%s %p');Result: '03:02:28 PM'mysql> SELECT TIME_FORMAT('15:02:28', '%h:%i%p');Result: '03:02PM'mysql> SELECT TIME_FORMAT('17:42:03.000001', '%r');Result: '05:42:03 PM'mysql> SELECT TIME_FORMAT('17:42:03.000001', '%T');Result: '17:42:03'mysql> SELECT TIME_FORMAT('07:42:03.000001', '%f');Result: '000001'