这份干货请你收好,长达2万字的时间函数总结,建议收藏!

图片来源于网络

文章转载自:极客学院,https://wiki.jikexueyuan.com/project/mysql/useful-functions/time-functions.html,不涉及任何商业用途,如有侵权,请联系后台删除

小编今天发现一篇总结的非常好的sql时间函数的文章,分享给大家。

函数名称函数功能说明ADDDATE()添加日期ADDTIME()添加时间CONVERT_TZ()转换不同时区CURDATE()返回当前日期CURRENT_DATE() 与 CURRENT_DATE等同于 CURDATE()CURRENT_TIME() 与 CURRENT_TIME等同于 CURTIME()CURRENT_TIMESTAMP() 与 CURRENT_TIMESTAMP等同于 NOW()CURTIME()返回当前时间DATE_ADD()添加两个日期DATE_FORMAT()按指定方式格式化日期DATE_SUB()求解两个日期的间隔DATE()提取日期或日期时间表达式中的日期部分DATEDIFF()求解两个日期的间隔DAY()等同于 DAYOFMONTH()DAYNAME()返回星期中某天的名称DAYOFMONTH()返回一月中某天的序号(1-31)DAYOFWEEK()返回参数所定影的一周中某天的索引值DAYOFYEAR()返回一年中某天的序号(1-366)EXTRACT提取日期中的相应部分FROM_DAYS()将一个天数序号转变为日期值FROM_UNIXTIME()将日期格式化为 UNIX 的时间戳HOUR()提取时间LAST_DAY根据参数,返回月中最后一天LOCALTIME() 和 LOCALTIME等同于 NOW()LOCALTIMESTAMP 和 LOCALTIMESTAMP()等同于 NOW()MAKEDATE()基于给定参数年份和所在年中的天数序号,返回一个日期MAKETIMEMAKETIME()MICROSECOND()返回参数所对应的毫秒数MINUTE()返回参数对应的分钟数MONTH()返回传入日期所对应的月序数MONTHNAME()返回月的名称NOW()返回当前日期与时间PERIOD_ADD()为年-月组合日期添加一个时段PERIOD_DIFF()返回两个时段之间的月份差值QUARTER()返回日期参数所对应的季度序号SEC_TO_TIME()将描述转变成 'HH:MM:SS' 的格式SECOND()返回秒序号(0-59)STR_TO_DATE()将字符串转变为日期SUBDATE()三个参数的版本相当于 DATE_SUB()SUBTIME()计算时间差值SYSDATE()返回函数执行时的时间TIME_FORMAT()提取参数中的时间部分TIME_TO_SEC()将参数转化为秒数TIME()提取传入表达式的时间部分TIMEDIFF()计算时间差值TIMESTAMP()单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和TIMESTAMPADD()为日期时间表达式添加一个间隔 INTERVALTIMESTAMPDIFF()从日期时间表达式中减去一个间隔 INTERVALTO_DAYS()返回转换成天数的日期参数UNIX_TIMESTAMP()返回一个 UNIX 时间戳UTC_DATE()返回当前的 UTC 日期UTC_TIME()返回当前的 UTC 时间UTC_TIMESTAMP()返回当前的 UTC 时间与日期WEEK()返回周序号WEEKDAY()返回某天在星期中的索引值WEEKOFYEAR()返回日期所对应的星期在一年当中的序号(1-53)YEAR()返回年份YEARWEEK()返回年份及星期序号

ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

在第2个参数使用 INTERVAL 格式时,ADDDATE() 作用就相当于 DATE_ADD()。相关的函数 SUBDATE() 相当于 DATE_SUB()。要想了解 INTERVAL 单位参数,参看DATE_ADD()相关内容。示例如下:  

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);+-----------------------------------------------------+| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 +-----------------------------------------------------+| 1998-02-02                                              +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);+------------------------------------------------------+| ADDDATE('1998-01-02', INTERVAL 31 DAY)                  +------------------------------------------------------+| 1998-02-02                                              +------------------------------------------------------+1 row in set (0.00 sec)

当函数的第2个参数采用 days 格式时,MySQL 会认为它是一个表示天数的整数,将它添加到 expr 上。示例如下:  

mysql> SELECT ADDDATE('1998-01-02', 31);+------------------------------------------------------+| DATE_ADD('1998-01-02', INTERVAL 31 DAY)                 +------------------------------------------------------+| 1998-02-02                                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

ADDTIME(expr1, expr2)

ADDTIME() 将 expr2 参数加到 expr1 参数上,返回结果。expr1 是一个时间或日期时间表达式。expr2 是一个时间表达式。  

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');+------------------------------------------------------+|DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') +------------------------------------------------------+| 1998-01-02 01:01:01.000001                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

CONVERT_TZ(dt,from_tz,to_tz)

这是一个转换时区的函数,将参数 from_tz 所定时区的日期时间值 dt 转变到参数 to_tz 所定时区,然后返回结果。如果参数无效,则该函数返回 NULL 值。  

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');+------------------------------------------------------+| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')           +------------------------------------------------------+| 2004-01-01 13:00:00                                     +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');+------------------------------------------------------+| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00')     +------------------------------------------------------+| 2004-01-01 22:00:00                                     +------------------------------------------------------+1 row in set (0.00 sec)

CURDATE()

返回当前日期的函数。根据函数究竟用于字符串还是数字上下文,选择使用 'YYYY-MM-DD'('年-月-日') 或 YYYYMMDD(年月日) 格式返回当前日期。  

mysql> SELECT CURDATE();+------------------------------------------------------+| CURDATE()                                               +------------------------------------------------------+| 1997-12-15                                              +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CURDATE() + 0;+------------------------------------------------------+| CURDATE() + 0                                           +------------------------------------------------------+| 19971215                                                +------------------------------------------------------+1 row in set (0.00 sec)
 
 

CURRENT_DATE 和 CURRENT_DATE()

CURRENT_DATE 和 CURRENT_DATE() 实际上等于 CURDATE()

CURTIME()

根据函数究竟用于字符串或数字上下文,选择以 'HH:MM:SS' 还是 HHMMSS 格式返回当前时间值(以当前时区来定)。  

mysql> SELECT CURTIME();+------------------------------------------------------+| CURTIME()                                               +------------------------------------------------------+| 23:50:26                                                +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT CURTIME() + 0;+------------------------------------------------------+| CURTIME() + 0                                           +------------------------------------------------------+| 235026                                                  +------------------------------------------------------+1 row in set (0.00 sec)

CURRENT_TIME 和 CURRENT_TIME()

CURRENT_TIME 和 CURRENT_TIME() 都相当于 CURTIME()。  

CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP() 实际上相当于 NOW()。  

DATE(expr)

提取日期或日期时间表达式 expr 中的日期部分。

mysql> SELECT DATE('2003-12-31 01:02:03');+------------------------------------------------------+| DATE('2003-12-31 01:02:03')                             +------------------------------------------------------+|  2003-12-31                                             +------------------------------------------------------+1 row in set (0.00 sec)

DATEDIFF(expr1,expr2)

DATEDIFF()将返回expr1 - expr2的值,用来表示两个日期相差的天数。expr1 和 expr2 都是日期或日期时间表达式。运算中只用到了这些值的日期部分。  

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');+------------------------------------------------------+| DATEDIFF('1997-12-31 23:59:59','1997-12-30')            +-----------------------------------------------------+| 1                                                       +------------------------------------------------------+1 row in set (0.00 sec)
 
 

DATE_ADD(date,INTERVAL expr unit) 与 DATE_SUB(date,INTERVAL expr unit)

执行日期计算的两种函数。date 是一个用来指定开始日期的 DATETIME 或 DATE 值。expr 是一种以字符串形式呈现的表达式,用来指定从开始日期增加或减少的间隔值。如果是负的间隔值,则 expr 值的第一个字符是-号。unit 是一个单位关键字,用来指定expr表达式应该采取的单位。

INTERVAL 关键字与单位说明符都不区分大小写。  

下表列出了每个单位数值所对应的 expr 参数的期望格式。  

单位所能取的值期望的expr格式MICROSECOND毫秒SECONDMINUTEHOUR小时DAYWEEKMONTHQUARTER季度YEARSECOND_MICROSECOND'秒.毫秒'MINUTE_MICROSECOND'分.毫秒'MINUTE_SECOND'分:秒'HOUR_MICROSECOND'小时.毫秒'HOUR_SECOND'小时:分:秒'HOUR_MINUTE'小时:分'DAY_MICROSECOND'日.毫秒'DAY_SECOND'日 小时:分:秒'DAY_MINUTE'日 小时:分'DAY_HOUR'日 小时'YEAR_MONTH'年-月'

QUARTER 和 WEEK 都是 MySQL 5.0.0 才开始引入的单位值。  

mysql> SELECT DATE_ADD('1997-12-31 23:59:59',     -> INTERVAL '1:1' MINUTE_SECOND);+------------------------------------------------------+| DATE_ADD('1997-12-31 23:59:59', INTERVAL...             +------------------------------------------------------+| 1998-01-01 00:01:00                                     +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);+------------------------------------------------------+| DATE_ADD('1999-01-01', INTERVAL 1 HOUR)                 +------------------------------------------------------+| 1999-01-01 01:00:00                                     +------------------------------------------------------+1 row in set (0.00 sec)

DATE_FORMAT(date,format)

该函数会根据 format 字符串来格式化 date 值。  

下表中列出了一些可用于 format 字符串的标识符。格式标识符第一个字符必须是%字符。  

格式标识符说明%a一星期中每天名称的缩写(Sun...Sat)%b月份的缩写(Jan...Dec)%c月份的数字表现形式(0...12)%D带有英语后缀的一个月中的每一天的名称(0th、1st、2nd、3rd)%d用数字形式表现的每月中的每一天(00...31)%e用数字形式表现的每月中的每一天(0...31)%f毫秒(000000...999999)%H24时制显示的小时(00...23)%h12时制显示的小时(01...12)%I12时制显示的小时(01...12)%i以数字形式表现的分钟数(00...59)%j一年中的每一天(001...366)%k24时制小时的另一种表现格式(0...23)%l12时制小时的另一种表现格式(1...12)%M用完整英文名称表示的月份(January...December)%m用数字表现的月份(00...12)%p上午(AM)或下午(PM)%r12时制的时间值(hh:mm:ss,后跟 AM 或 PM)%S秒(00...59)%s秒(00...59)%T24时制的小时(hh:mm:ss)%U星期(00...53),其中星期天是每星期的开始日%u星期(00...53),其中星期一是每星期的开始日%V星期(01...53),其中星期天是每星期的开始日,和 %X 一起使用%v星期(01...53),其中星期一是每星期的开始日,和 %x 一起使用%W一星期中各日名称(Sunday...Saturday)%w一星期中各日名称(0代表星期日,6代表星期六,以此类推)%X某星期所处年份。其中,星期天是每星期的开始日,采用4位数字形式表现,和 %V一起使用%x某星期所处年份。其中,星期一是每星期的开始日,采用4位数字形式表现,和 %V 一起使用%Y4位数字表示的年份%y2位数字表示的年份%%符号%的字面值%x(x为斜体)字符x的字面值,x指以上未列出的任何字符
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');+------------------------------------------------------+| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y')          +------------------------------------------------------+| Saturday October 1997                                   +---------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'    -> '%H %k %I %r %T %S %w');+------------------------------------------------------+| DATE_FORMAT('1997-10-04 22:23:00.......                 +------------------------------------------------------+|  22 22 10 10:23:00 PM 22:23:00 00 6                     +------------------------------------------------------+1 row in set (0.00 sec)

DATE_SUB(date,INTERVAL expr unit)

类似 DATE_ADD() 函数。

DAY(date)

DAY() 等同于 DAYOFMONTH()。  

DAYNAME(date)

返回 date 参数所对应的星期几。  

mysql> SELECT DAYNAME('1998-02-05');+------------------------------------------------------+| DAYNAME('1998-02-05')                                   +------------------------------------------------------+| Thursday                                               +------------------------------------------------------+1 row in set (0.00 sec)

DAYOFMONTH(date)

返回 date 参数所对应的一月中的第几天,取值范围从0到31。  

mysql> SELECT DAYOFMONTH('1998-02-03');+------------------------------------------------------+| DAYOFMONTH('1998-02-03')                                +------------------------------------------------------+| 3                                                       +------------------------------------------------------+1 row in set (0.00 sec)

DAYOFWEEK(date)

返回 date 参数所对应的每周中的某一天的索引值(1 = Sunday,2 = Monday……7 = Saturday)。这些索引值对应着 ODBC 标准。

mysql> SELECT DAYOFWEEK('1998-02-03');+------------------------------------------------------+|DAYOFWEEK('1998-02-03')                                  +------------------------------------------------------+| 3                                                       +------------------------------------------------------+1 row in set (0.00 sec)

DAYOFYEAR(date)

返回 date 参数所对应的一年中的某一天,取值范围从1到366。  

mysql> SELECT DAYOFYEAR('1998-02-03');+------------------------------------------------------+| DAYOFYEAR('1998-02-03')                                 +------------------------------------------------------+| 34                                                     +------------------------------------------------------+1 row in set (0.00 sec)
 
 

EXTRACT(unit FROM date)

EXTRACT() 函数 使用同样的单位标识符 DATE_ADD() 或 DATE_SUB(),但是只从 date  中提取相应部分,而不执行日期运算。  

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');+------------------------------------------------------+| EXTRACT(YEAR FROM '1999-07-02')                         +------------------------------------------------------+| 1999                                                    +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');+------------------------------------------------------+| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03')          +------------------------------------------------------+| 199907                                                  +------------------------------------------------------+1 row in set (0.00 sec)
 
 

FROM_DAYS(N)

给定某日 N,返回一个 DATE 值。  

mysql> SELECT FROM_DAYS(729669);+------------------------------------------------------+| FROM_DAYS(729669)                                       +------------------------------------------------------+| 1997-10-07                                              +------------------------------------------------------+1 row in set (0.00 sec)

使用 FROM_DAYS() 时,要特别注意古代的日期。该函数不适用于格里高里历(即公历)颁布(公元1582年)之前的日期。

FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format)

mysql> SELECT FROM_UNIXTIME(875996580);+------------------------------------------------------+| FROM_UNIXTIME(875996580)                                +------------------------------------------------------+| 1997-10-04 22:23:00                                     +------------------------------------------------------+1 row in set (0.00 sec)
 
 

HOUR(time)

mysql> SELECT HOUR('10:05:03');+------------------------------------------------------+| HOUR('10:05:03')                                        +------------------------------------------------------+| 10                                                      +------------------------------------------------------+1 row in set (0.00 sec)
 
 

LAST_DAY(date)

mysql> SELECT LAST_DAY('2003-02-05');+------------------------------------------------------+| LAST_DAY('2003-02-05')                                  +------------------------------------------------------+| 2003-02-28                                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

LOCALTIME 和 LOCALTIME()  

LOCALTIME 和 LOCALTIME() 与 NOW() 具有相同意义。    

LOCALTIMESTAMP 和 LOCALTIMESTAMP()  

LOCALTIMESTAMP 和 LOCALTIMESTAMP() 与 NOW()具有相同意义。  

MAKEDATE(year,dayofyear)    

基于给定参数年份(year)和一年中的某一天(dayofyear),返回一个日期值。dayofyear必须大于0,否则结果为空。

dayofyearDAYOFYEAR()函数取值类似,取值范围为1-366。  

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);+-----------------------------------------------------+| MAKEDATE(2001,31), MAKEDATE(2001,32)                    +-----------------------------------------------------+| '2001-01-31', '2001-02-01'                              +-----------------------------------------------------+1 row in set (0.00 sec)

MAKETIME(hour,minute,second)

基于给定的 hourminute以及 second 这3个参数,计算出一个时间值。  

mysql> SELECT MAKETIME(12,15,30);+------------------------------------------------------+| MAKETIME(12,15,30)                                      +------------------------------------------------------+| '12:15:30'                                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

MICROSECOND(expr)

基于时间或“日期+时间”的表达式 expr,返回一个以毫秒计的时间值,取值范围为0-99999。  

mysql> SELECT MICROSECOND('12:00:00.123456');+------------------------------------------------------+| MICROSECOND('12:00:00.123456')                          +------------------------------------------------------+| 123456                                                  +------------------------------------------------------+1 row in set (0.00 sec)

MINUTE(time)  

基于 time 参数,返回分钟数,取值范围为0-59。  

mysql> SELECT MINUTE('98-02-03 10:05:03');+------------------------------------------------------+| MINUTE('98-02-03 10:05:03')                             +------------------------------------------------------+| 5                                                       +------------------------------------------------------+1 row in set (0.00 sec)

MONTH(date)

基于 date 参数,返回月份值,取值范围为0-12。  

mysql> SELECT MONTH('1998-02-03')+------------------------------------------------------+| MONTH('1998-02-03')                                     +------------------------------------------------------+| 2                                                       +------------------------------------------------------+1 row in set (0.00 sec)

MONTHNAME(date)

基于 date 参数,返回月份的完整英文名称。  

mysql> SELECT MONTHNAME('1998-02-05');+------------------------------------------------------+| MONTHNAME('1998-02-05')                                 +------------------------------------------------------+| February                                                +------------------------------------------------------+1 row in set (0.00 sec)

NOW()

返回一定格式的日期+时间值。根据函数是否用于字符串或数字内容,格式为 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS。

mysql> SELECT NOW();+------------------------------------------------------+| NOW()                                                   +------------------------------------------------------+| 1997-12-15 23:50:26                                     +------------------------------------------------------+1 row in set (0.00 sec)

PERIOD_ADD(P,N)

将 N 个月添加到时段 P (格式为 YYMM 或 YYYYMM)上,返回值格式为 YYYYMM。注意:时段参数 P 不是一个日期值。  

mysql> SELECT PERIOD_ADD(9801,2);+------------------------------------------------------+| PERIOD_ADD(9801,2)                                      +------------------------------------------------------+| 199803                                                  +------------------------------------------------------+1 row in set (0.00 sec)

PERIOD_DIFF(P1,P2)

时段 P1 和 P2 之间的月份差值。P1 与 P2 的格式应为 YYMM 或 YYYYMM。注意,时段参数 P1 和 P2 都不是日期值。  

mysql> SELECT PERIOD_DIFF(9802,199703);+------------------------------------------------------+| PERIOD_DIFF(9802,199703)                                +------------------------------------------------------+| 11                                                      +------------------------------------------------------+1 row in set (0.00 sec)
 
 

QUARTER(date)

返回参数 date 所对应的年中某季度,取值范围为1-4。  

mysql> SELECT QUARTER('98-04-01');+------------------------------------------------------+| QUARTER('98-04-01')                                     +------------------------------------------------------+| 2                                                       +------------------------------------------------------+1 row in set (0.00 sec)

SECOND(time)

返回参数 time 所对应的秒数,取值范围为0-59。  

mysql> SELECT SECOND('10:05:03');+------------------------------------------------------+| SECOND('10:05:03')                                      +------------------------------------------------------+| 3                                                       +-----------------------------------------------------+1 row in set (0.00 sec)
 
 

SEC_TO_TIME(seconds)  

将参数 seconds 转换成以'HH:MM:SS' 或 HHMMSS 格式(根据函数应用上下文是字符串还是数字)输出的时间值。  

mysql> SELECT SEC_TO_TIME(2378);+------------------------------------------------------+| SEC_TO_TIME(2378)                                       +------------------------------------------------------+| 00:39:38                                                +------------------------------------------------------+1 row in set (0.00 sec)
 
 

STR_TO_DATE(str,format)

DATE_FORMAT()函数的逆向函数。包含2个参数,字符串类型参数 str 和格式字符串参数 format。返回值有2种可能性:如果格式字符串既包含日期又包含时间,则返回一个 DATETIME 值;如果格式字符串只包含日期或时间部分,则函数也相应返回 DATE 或 TIME 类型的值。  

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');+------------------------------------------------------+| STR_TO_DATE('04/31/2004', '%m/%d/%Y')                   +------------------------------------------------------+| 2004-04-31                                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

SUBDATE(date,INTERVAL expr unit) 与 SUBDATE(expr,days)

当第二个参数采用 INTERVAL 格式时,SUBDATE() 等同于 DATE_SUB()。要想详细了解 INTERVAL 单元参数,请参考 DATE_ADD()。  

mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);+------------------------------------------------------+| DATE_SUB('1998-01-02', INTERVAL 31 DAY)                 +------------------------------------------------------+| 1997-12-02                                              +------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);+------------------------------------------------------+| SUBDATE('1998-01-02', INTERVAL 31 DAY)                  +-----------------------------------------------------+| 1997-12-02                                             +------------------------------------------------------+1 row in set (0.00 sec)

SUBTIME(expr1,expr2)

返回值为 expr1 - expr2,格式与 expr1 相同。expr1 是一个时间或日期时间表达式,而 expr2 是一个时间表达式。  

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999',    -> '1 1:1:1.000002');+------------------------------------------------------+| SUBTIME('1997-12-31 23:59:59.999999'...                 +------------------------------------------------------+| 1997-12-30 22:58:58.999997                              +------------------------------------------------------+1 row in set (0.00 sec)
 
 

SYSDATE()

根据函数所应用的上下文究竟是字符串还是数字,以 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回当前日期与时间值。  

mysql> SELECT SYSDATE();+------------------------------------------------------+| SYSDATE()                                               +------------------------------------------------------+| 2006-04-12 13:47:44                                     +------------------------------------------------------+1 row in set (0.00 sec)

TIME(expr)

提取时间或日期时间表达式 expr 的时间部分,将其作为字符串返回。  

mysql> SELECT TIME('2003-12-31 01:02:03');+------------------------------------------------------+| TIME('2003-12-31 01:02:03')                             +------------------------------------------------------+| 01:02:03                                                +------------------------------------------------------+1 row in set (0.00 sec)
TIMEDIFF(expr1,expr2)

返回表示为时间值的 expr1 - expr2expr1 和 expr2 都是时间或日期与时间表达式,但两者必须类型相同。  

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',    -> '1997-12-30 01:01:01.000002');+------------------------------------------------------+| TIMEDIFF('1997-12-31 23:59:59.000001'.....              +------------------------------------------------------+|  46:58:57.999999                                       +------------------------------------------------------+1 row in set (0.00 sec)
 
 

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

当只接受一个参数 expr(日期或日期时间类型)时,函数将这个参数以日期时间的形式返回;若接受两个参数,函数则会将时间参数 expr2 添加到日期或日期时间参数 expr1 上,以日期时间形式返回这个组合值。

mysql> SELECT TIMESTAMP('2003-12-31');+----------------------------------------------------+| TIMESTAMP('2003-12-31')                                 +----------------------------------------------------+| 2003-12-31 00:00:00                                     +----------------------------------------------------+1 row in set (0.00 sec)
 
 

TIMESTAMPADD(unit,interval,datetime_expr)

函数将表示间隔值的整形参数 interval 添加到日期或日期时间参数 datetime_expr 上。interval 所采用的单位由 unit 参数指定。unit 参数的取值范围是:FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER 或 YEAR。  

unit 值也可以通过一个前面介绍过的关键字来标识,或者说需要加上前缀 SQL_TSI_。例如:DAY 和 SQL_TSI_DAY。这两种形式都是合法的。

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');+------------------------------------------------------+| TIMESTAMPADD(MINUTE,1,'2003-01-02')                     +------------------------------------------------------+| 2003-01-02 00:01:00                                     +------------------------------------------------------+1 row in set (0.00 sec)
 
 

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

返回两个日期或日期时间类型参数 datetime_expr1 与 datetime_epr2 之间的整数差值。返回值所采用的单位由 unit 参数指定。有关unit 的合法值,可参看 TIMESTAMPADD() 函数介绍。    

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');+------------------------------------------------------+| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01')         +------------------------------------------------------+| 3                                                      +------------------------------------------------------+1 row in set (0.00 sec)

TIME_FORMAT(time,format)

该函数和 DATE_FORMAT() 函数用法类似,但 format 字符串中只含有与小时、分钟、秒相关的格式标识符。  

如果 time 值包含一个大于23的小时数,%H 与 %k 小时格式标识符就会生成一个超出平时所用范围(0-23)的值。其他与小时相关的格式标识符会生成以12取模的值。  

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');+------------------------------------------------------+| TIME_FORMAT('100:00:00', '%H %k %h %I %l')              +------------------------------------------------------+| 100 100 04 04 4                                         +------------------------------------------------------+1 row in set (0.00 sec)
 
 

TIME_TO_SEC(time)

将 time 参数转换成秒数返回。    

mysql> SELECT TIME_TO_SEC('22:23:00');+------------------------------------------------------+| TIME_TO_SEC('22:23:00')                                 +------------------------------------------------------+| 80580                                                   +------------------------------------------------------+1 row in set (0.00 sec)
 
 

TO_DAYS(date)

基于日期参数 date,返回一个天数(自年份0开始的天数)。  

mysql> SELECT TO_DAYS(950501);+-----------------------------------------------------+| TO_DAYS(950501)                                         +-----------------------------------------------------+| 728779                                                  +-----------------------------------------------------+1 row in set (0.00 sec)
 
 

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

如果不传入参数调用该函数,返回一个 UNIX 时间戳,它是一个自 '1970-01-01 00:00:00'   UTC(世界统一时间) 起计算的秒数,无符号整形值。如果传入 date 参数调用该函数,则返回一个自'1970-01-01 00:00:00' UTC 到该参数所示时间所经历的秒数。date 参数可能是 DATE 字符串、DATETIME 字符串、TIMESTAMP,或者也有可能是以 YYMMDD 或 YYYYMMDD 格式表示的数值。  

mysql> SELECT UNIX_TIMESTAMP();+-----------------------------------------------------+| UNIX_TIMESTAMP()                                       +-----------------------------------------------------+| 882226357                                               +-----------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');+-----------------------------------------------------+| UNIX_TIMESTAMP('1997-10-04 22:23:00')                   +------------------------------------------------------+| 875996580                                               +-----------------------------------------------------+1 row in set (0.00 sec)
 
 

UTC_DATE, UTC_DATE()

根据函数应用的上下文究竟是字符串还是数字,相应地以 'YYYY-MM-DD' 或 YYYYMMDD 格式返回当前的 UTC 日期值。    

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;+------------------------------------------------------+| UTC_DATE(), UTC_DATE() + 0                             +------------------------------------------------------+| 2003-08-14, 20030814                                   +------------------------------------------------------+1 row in set (0.00 sec)

UTC_TIME, UTC_TIME()  

根据函数应用的上下文究竟是字符串还是数字,相应地以 'HH:MM:SS' 或 HHMMSS 格式返回当前的 UTC 时间值。  

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;+------------------------------------------------------+| UTC_TIME(), UTC_TIME() + 0                              +------------------------------------------------------+| 18:07:53, 180753                                        +------------------------------------------------------+1 row in set (0.00 sec)
 
 

UTC_TIMESTAMP, UTC_TIMESTAMP()

根据函数应用的上下文究竟是字符串还是数字,相应地以 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回当前的 UTC 日期与时间值。    

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;+------------------------------------------------------+| UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0                    +------------------------------------------------------+| 2003-08-14 18:08:04, 20030814180804                     +------------------------------------------------------+1 row in set (0.00 sec)

WEEK(date[,mode])  

该函数返回日期参数 date 所对应的星期序号。如果传入两个参数,则可以指定每星期起始日究竟是星期天还是星期一,以及返回值范围究竟是0-53,还是从1-53。如果忽略 mode 参数,就采用 default_week_format 系统变量值。

模式每星期的起始天范围当 Week 1 是第一个星期时0星期日0-53本年有一个周日1星期一0-53本年有3天以上2星期日1-53本年有一个周日3星期一1-53本年有3天以上4星期日0-53本年有3天以上5星期一0-53本年有一个周一6星期日1-53本年有3天以上7星期一1-53本年有一个周日
mysql> SELECT WEEK('1998-02-20');+------------------------------------------------------+| WEEK('1998-02-20')                                      +------------------------------------------------------+| 7                                                       +------------------------------------------------------+1 row in set (0.00 sec)
 
 

WEEKDAY(date)

返回日期参数 date 所对应的星期中每天的索引值(例如,0=星期一,1=星期二,6=星期天)。  

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');+------------------------------------------------------+| WEEKDAY('1998-02-03 22:23:00')                          +------------------------------------------------------+| 1                                                       +------------------------------------------------------+1 row in set (0.00 sec)

WEEKOFYEAR(date)

返回日期参数 date 所对应的一年中的星期序号(范围1-53)。WEEKOFYEAR() 是一个兼容函数,与 WEEK(date,3)等同。

mysql> SELECT WEEKOFYEAR('1998-02-20');+------------------------------------------------------+|WEEKOFYEAR('1998-02-20')                                +------------------------------------------------------+|8                                                       +------------------------------------------------------+1 row in set (0.00 sec)

YEAR(date)

返回 date 的年份,范围为1000-9999。当 date 为0时,返回0。

mysql> SELECT YEAR('98-02-03');+------------------------------------------------------+|YEAR('98-02-03')                                        +------------------------------------------------------+|1998                                                    +------------------------------------------------------+1 row in set (0.00 sec)

YEARWEEK(date) 与 YEARWEEK(date,mode)

返回 date 的年份及星期序号。mode 参数等同于 WEEK() 中的 mode 参数。结果中的年份可能会和 date 参数中的年份有所不同,差异体现在年份中的第一个与最后一个星期上。

mysql> SELECT YEARWEEK('1987-01-01');+------------------------------------------------------+|YEAR('98-02-03')YEARWEEK('1987-01-01')                  +------------------------------------------------------+|198653                                                  +------------------------------------------------------+1 row in set (0.00 sec)

注意,当可选参数为0或1时,WEEK() 函数返回的是0,和这里返回的有所不同,因为 WEEK() 返回的是指定年份的星期序号。

本文为转载分享,如有侵权,请联系后台删除!

往期推荐

史上最全的SQL知识点汇总,错过这次在等一年

SQL知识大全(一):数据库的语言分类你都知道吗?

SQL知识大全(二):SQL的基础知识你都掌握了吗?

SQL知识大全三):SQL中的字符串处理和条件查询

SQL知识大全(四):SQL中的数据表关联

 

分享数据知识,成就数据理想

你可能感兴趣的:(这份干货请你收好,长达2万字的时间函数总结,建议收藏!)